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;
|
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)
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user