namespace boost{ namespace math{ namespace detail{
template <class T, class Policy>
-T ulp_imp(const T& val, const boost::true_type&, const Policy& pol)
+T ulp_imp(const T& val, const std::true_type&, const Policy& pol)
{
BOOST_MATH_STD_USING
int expon;
}
// non-binary version:
template <class T, class Policy>
-T ulp_imp(const T& val, const boost::false_type&, const Policy& pol)
+T ulp_imp(const T& val, const std::false_type&, const Policy& pol)
{
- BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_specialized);
- BOOST_STATIC_ASSERT(std::numeric_limits<T>::radix != 2);
+ static_assert(std::numeric_limits<T>::is_specialized, "Type T must be specialized.");
+ static_assert(std::numeric_limits<T>::radix != 2, "Type T must be specialized.");
BOOST_MATH_STD_USING
int expon;
static const char* function = "ulp<%1%>(%1%)";
inline typename tools::promote_args<T>::type ulp(const T& val, const Policy& pol)
{
typedef typename tools::promote_args<T>::type result_type;
- return detail::ulp_imp(static_cast<result_type>(val), boost::integral_constant<bool, !std::numeric_limits<result_type>::is_specialized || (std::numeric_limits<result_type>::radix == 2)>(), pol);
+ return detail::ulp_imp(static_cast<result_type>(val), std::integral_constant<bool, !std::numeric_limits<result_type>::is_specialized || (std::numeric_limits<result_type>::radix == 2)>(), pol);
}
template <class T>