mirror of
https://github.com/boostorg/multiprecision.git
synced 2026-07-21 13:23:49 +00:00
Fix some clang issues.
This commit is contained in:
@@ -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;
|
||||
|
||||
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."));
|
||||
if (val < 0)
|
||||
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>
|
||||
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_subtract_imp(result, arg, true);
|
||||
}
|
||||
|
||||
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_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>
|
||||
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_subtract_imp(result, a, b, true);
|
||||
}
|
||||
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_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>
|
||||
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_imp(result.num(), result.denom(), arg);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (b == 0)
|
||||
@@ -892,7 +892,7 @@ inline void eval_multiply_imp(rational_adaptor<Backend>& result, const Backend&
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (&result == &a)
|
||||
@@ -902,7 +902,7 @@ inline typename std::enable_if<std::is_convertible<Arithmetic, Backend>::value&&
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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>
|
||||
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)
|
||||
{
|
||||
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>
|
||||
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)
|
||||
{
|
||||
if (arg == 0)
|
||||
@@ -1066,7 +1066,7 @@ void eval_divide(rational_adaptor<Backend>& result, Backend arg)
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (&result == &a)
|
||||
|
||||
@@ -8,18 +8,26 @@
|
||||
#include "test_arithmetic.hpp"
|
||||
|
||||
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 <>
|
||||
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()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -8,18 +8,18 @@
|
||||
#include "test_arithmetic.hpp"
|
||||
|
||||
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 <>
|
||||
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()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user