diff --git a/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp b/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp index 37717cd51..1dfe181de 100644 --- a/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp +++ b/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp @@ -35,10 +35,12 @@ #undef BOOST_MP_HAS_IMMINTRIN_H #endif -#if defined(BOOST_MSVC) && !defined(_M_IX86) && !defined(_M_X64) && !defined(_M_AMD64) +#if defined(_WIN32) && (defined(_M_ARM64) || defined(_M_ARM)) // -// When targeting platforms such as ARM, msvc still has the Intel headers in it's include path -// even though they're not usable. See https://github.com/boostorg/multiprecision/issues/321 +// When targeting platforms such as ARM, msvc (and also clang when emulating msvc) still has the +// Intel headers in its include path even though they're not usable. +// See https://github.com/boostorg/multiprecision/issues/321 +// Also https://github.com/boostorg/multiprecision/issues/475 // #undef BOOST_MP_HAS_IMMINTRIN_H #endif diff --git a/include/boost/multiprecision/integer.hpp b/include/boost/multiprecision/integer.hpp index a5ed9fd7c..2873b730a 100644 --- a/include/boost/multiprecision/integer.hpp +++ b/include/boost/multiprecision/integer.hpp @@ -336,11 +336,12 @@ BOOST_MP_CXX14_CONSTEXPR Integer bitwise_sqrt(const Integer& x, Integer& r) template BOOST_MP_CXX14_CONSTEXPR typename std::enable_if::value, Integer>::type sqrt(const Integer& x, Integer& r) { - return detail::bitwise_sqrt(x, r); #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION // recursive Karatsuba sqrt can cause issues in constexpr context: if (BOOST_MP_IS_CONST_EVALUATED(x)) + { return detail::bitwise_sqrt(x, r); + } #endif if (x == 0u) { r = 0u; diff --git a/test/test_eigen_interop.cpp b/test/test_eigen_interop.cpp index f18e22c04..99776b982 100644 --- a/test/test_eigen_interop.cpp +++ b/test/test_eigen_interop.cpp @@ -363,7 +363,7 @@ void example10() cout << "a.abs().sqrt() =" << endl << a.abs().sqrt() << endl; cout << "a.min(a.abs().sqrt()) =" << endl - << a.std::min)(a.abs().sqrt()) << endl; + << (a.min)(a.abs().sqrt()) << endl; } template