Fix some clang issues.

This commit is contained in:
jzmaddock
2021-09-25 19:10:22 +01:00
parent b80a573602
commit dd4f4cc732
4 changed files with 28 additions and 20 deletions
+1 -1
View File
@@ -1158,7 +1158,7 @@ struct cpp_int_base<MinBits, MinBits, unsigned_magnitude, Checked, void, true>
{ {
using common_type = typename std::common_type<T, local_limb_type>::type; using common_type = typename std::common_type<T, local_limb_type>::type;
if (static_cast<common_type>(val) > limb_mask) if (static_cast<common_type>(val) > static_cast<common_type>(limb_mask))
BOOST_THROW_EXCEPTION(std::range_error("The argument to a cpp_int constructor exceeded the largest value it can represent.")); BOOST_THROW_EXCEPTION(std::range_error("The argument to a cpp_int constructor exceeded the largest value it can represent."));
if (val < 0) if (val < 0)
BOOST_THROW_EXCEPTION(std::range_error("The argument to an unsigned cpp_int constructor was negative.")); BOOST_THROW_EXCEPTION(std::range_error("The argument to an unsigned cpp_int constructor was negative."));
@@ -522,14 +522,14 @@ void eval_add_subtract_imp(rational_adaptor<Backend>& result, const Arithmetic&
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_add(rational_adaptor<Backend>& result, const Arithmetic& arg) eval_add(rational_adaptor<Backend>& result, const Arithmetic& arg)
{ {
eval_add_subtract_imp(result, arg, true); eval_add_subtract_imp(result, arg, true);
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_subtract(rational_adaptor<Backend>& result, const Arithmetic& arg) eval_subtract(rational_adaptor<Backend>& result, const Arithmetic& arg)
{ {
eval_add_subtract_imp(result, arg, false); eval_add_subtract_imp(result, arg, false);
@@ -668,13 +668,13 @@ void eval_add_subtract_imp(rational_adaptor<Backend>& result, const rational_ada
// //
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_add(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, const Arithmetic& b) eval_add(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, const Arithmetic& b)
{ {
eval_add_subtract_imp(result, a, b, true); eval_add_subtract_imp(result, a, b, true);
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_subtract(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, const Arithmetic& b) eval_subtract(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, const Arithmetic& b)
{ {
eval_add_subtract_imp(result, a, b, false); eval_add_subtract_imp(result, a, b, false);
@@ -836,14 +836,14 @@ void eval_multiply_imp(Backend& result_num, Backend& result_denom, Backend arg)
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_multiply(rational_adaptor<Backend>& result, const Arithmetic& arg) eval_multiply(rational_adaptor<Backend>& result, const Arithmetic& arg)
{ {
eval_multiply_imp(result.num(), result.denom(), arg); eval_multiply_imp(result.num(), result.denom(), arg);
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value>::type typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value>::type
eval_multiply_imp(rational_adaptor<Backend>& result, const Backend& a_num, const Backend& a_denom, Arithmetic b) eval_multiply_imp(rational_adaptor<Backend>& result, const Backend& a_num, const Backend& a_denom, Arithmetic b)
{ {
if (b == 0) if (b == 0)
@@ -892,7 +892,7 @@ inline void eval_multiply_imp(rational_adaptor<Backend>& result, const Backend&
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_multiply(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, const Arithmetic& b) eval_multiply(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, const Arithmetic& b)
{ {
if (&result == &a) if (&result == &a)
@@ -902,7 +902,7 @@ inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&&
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_multiply(rational_adaptor<Backend>& result, const Arithmetic& b, const rational_adaptor<Backend>& a) eval_multiply(rational_adaptor<Backend>& result, const Arithmetic& b, const rational_adaptor<Backend>& a)
{ {
return eval_multiply(result, a, b); return eval_multiply(result, a, b);
@@ -937,7 +937,7 @@ inline void eval_divide(rational_adaptor<Backend>& result, const rational_adapto
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value>::type inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && (std::is_integral<Arithmetic>::value || std::is_same<Arithmetic, Backend>::value)>::type
eval_divide(rational_adaptor<Backend>& result, const Arithmetic& b, const rational_adaptor<Backend>& a) eval_divide(rational_adaptor<Backend>& result, const Arithmetic& b, const rational_adaptor<Backend>& a)
{ {
using default_ops::eval_get_sign; using default_ops::eval_get_sign;
@@ -963,7 +963,7 @@ inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&&
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value>::type typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value>::type
eval_divide(rational_adaptor<Backend>& result, Arithmetic arg) eval_divide(rational_adaptor<Backend>& result, Arithmetic arg)
{ {
if (arg == 0) if (arg == 0)
@@ -1066,7 +1066,7 @@ void eval_divide(rational_adaptor<Backend>& result, Backend arg)
} }
template <class Backend, class Arithmetic> template <class Backend, class Arithmetic>
typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&& std::is_integral<Arithmetic>::value>::type typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value && std::is_integral<Arithmetic>::value>::type
eval_divide(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, Arithmetic arg) eval_divide(rational_adaptor<Backend>& result, const rational_adaptor<Backend>& a, Arithmetic arg)
{ {
if (&result == &a) if (&result == &a)
+12 -4
View File
@@ -8,18 +8,26 @@
#include "test_arithmetic.hpp" #include "test_arithmetic.hpp"
template <> template <>
struct related_type<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint128_t::backend_type> > > struct related_type<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint256_t::backend_type> > >
{ {
typedef boost::multiprecision::checked_uint128_t type; typedef boost::multiprecision::checked_uint256_t type;
}; };
template <> template <>
struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint128_t::backend_type> > > : public std::false_type struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint256_t::backend_type> > > : public std::false_type
{}; {};
template <>
struct is_checked_cpp_int<boost::multiprecision::checked_uint256_t> : public std::integral_constant<bool, true>
{};
template <>
struct is_checked_cpp_int<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint256_t::backend_type> > > : public std::integral_constant<bool, true>
{};
int main() int main()
{ {
test<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint128_t::backend_type> > >(); test<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint256_t::backend_type> > >();
return boost::report_errors(); return boost::report_errors();
} }
+4 -4
View File
@@ -8,18 +8,18 @@
#include "test_arithmetic.hpp" #include "test_arithmetic.hpp"
template <> template <>
struct related_type<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int128_t::backend_type> > > struct related_type<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int256_t::backend_type> > >
{ {
typedef boost::multiprecision::checked_int128_t type; typedef boost::multiprecision::checked_int256_t type;
}; };
template <> template <>
struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int128_t::backend_type> > > : public std::false_type struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int256_t::backend_type> > > : public std::false_type
{}; {};
int main() int main()
{ {
test<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int128_t::backend_type> > >(); test<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int256_t::backend_type> > >();
return boost::report_errors(); return boost::report_errors();
} }