diff --git a/include/boost/multiprecision/detail/number_base.hpp b/include/boost/multiprecision/detail/number_base.hpp index 1c1267df..0d7fe45a 100644 --- a/include/boost/multiprecision/detail/number_base.hpp +++ b/include/boost/multiprecision/detail/number_base.hpp @@ -76,7 +76,7 @@ struct has_enough_bits template struct canonical_imp { - typedef typename decay::type type; + typedef typename remove_cv::type>::type type; }; template struct canonical_imp > diff --git a/include/boost/multiprecision/mpfr.hpp b/include/boost/multiprecision/mpfr.hpp index 98fa9334..cdbb8cfb 100644 --- a/include/boost/multiprecision/mpfr.hpp +++ b/include/boost/multiprecision/mpfr.hpp @@ -1083,7 +1083,6 @@ struct is_explicitly_convertible, backends::mpf template<> struct number_category >::type> : public mpl::int_{}; - using boost::multiprecision::backends::mpfr_float_backend; typedef number > mpfr_float_50; diff --git a/include/boost/multiprecision/number.hpp b/include/boost/multiprecision/number.hpp index a9ae4721..55b38314 100644 --- a/include/boost/multiprecision/number.hpp +++ b/include/boost/multiprecision/number.hpp @@ -1601,7 +1601,11 @@ private: template static BOOST_FORCEINLINE BOOST_CONSTEXPR const B2& canonical_value(const number& v) BOOST_NOEXCEPT { return v.backend(); } template - static BOOST_FORCEINLINE BOOST_CONSTEXPR typename detail::canonical::type canonical_value(const V& v) BOOST_NOEXCEPT { return static_cast::type>(v); } + static BOOST_FORCEINLINE BOOST_CONSTEXPR typename disable_if::type, V>, typename detail::canonical::type>::type + canonical_value(const V& v) BOOST_NOEXCEPT { return static_cast::type>(v); } + template + static BOOST_FORCEINLINE BOOST_CONSTEXPR typename enable_if::type, V>, const V&>::type + canonical_value(const V& v) BOOST_NOEXCEPT { return v; } static BOOST_FORCEINLINE typename detail::canonical::type canonical_value(const std::string& v) BOOST_NOEXCEPT { return v.c_str(); } static BOOST_FORCEINLINE BOOST_CONSTEXPR const Backend& function_arg_value(const self_type& v) BOOST_NOEXCEPT { return v.backend(); } diff --git a/include/boost/multiprecision/rational_adapter.hpp b/include/boost/multiprecision/rational_adapter.hpp index 5e4ef673..6dd07d6f 100644 --- a/include/boost/multiprecision/rational_adapter.hpp +++ b/include/boost/multiprecision/rational_adapter.hpp @@ -41,11 +41,11 @@ struct rational_adapter template explicit rational_adapter(const U& u, typename enable_if_c< - detail::is_explicitly_convertible::value && !is_convertible::value + boost::multiprecision::detail::is_explicitly_convertible::value && !is_convertible::value >::type* = 0) : m_value(IntBackend(u)){} template - typename enable_if_c<(detail::is_explicitly_convertible::value && !is_arithmetic::value), rational_adapter&>::type operator = (const U& u) + typename enable_if_c<(boost::multiprecision::detail::is_explicitly_convertible::value && !is_arithmetic::value), rational_adapter&>::type operator = (const U& u) { m_value = IntBackend(u); }