diff --git a/include/boost/multiprecision/detail/number_base.hpp b/include/boost/multiprecision/detail/number_base.hpp index 2f4db9df..e36f9d66 100644 --- a/include/boost/multiprecision/detail/number_base.hpp +++ b/include/boost/multiprecision/detail/number_base.hpp @@ -150,10 +150,17 @@ template struct is_number_expression > : public std::integral_constant {}; +namespace detail { +template +struct canonical; +} + template struct is_compatible_arithmetic_type : public std::integral_constant::value && !std::is_same::value && !is_number_expression::value> + std::is_convertible::value && !std::is_same::value && !is_number_expression::value + && (std::is_constructible::type>::value + || std::is_assignable::type>::value || is_number::value || is_number_expression::value)> {}; namespace detail { diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 2deef918..3e490a13 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -1240,6 +1240,7 @@ test-suite misc : [ check-target-builds ../config//has_float128 : quadmath TEST_FLOAT128 ] TEST_CPP_DEC_FLOAT TEST_CPP_BIN_FLOAT ] + [ compile git_issue_608.cpp ] [ compile git_issue_98.cpp : [ check-target-builds ../config//has_float128 : TEST_FLOAT128 quadmath : ] [ check-target-builds ../config//has_gmp : TEST_GMP gmp : ] diff --git a/test/git_issue_608.cpp b/test/git_issue_608.cpp new file mode 100644 index 00000000..ee730515 --- /dev/null +++ b/test/git_issue_608.cpp @@ -0,0 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright 2024 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +using big_float_type = boost::multiprecision::cpp_bin_float_100; + +int main() +{ + static_assert(boost::multiprecision::is_compatible_arithmetic_type, big_float_type>::value == 0, "This should not be a compatible type"); +} +