1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <limits> namespace { template <typename T> void test_numeric_limits () { static_cast<void>(std::numeric_limits<T>::has_denorm); static_cast<void>(std::numeric_limits<T>::has_denorm_loss); static_cast<void>(std::numeric_limits<T>::has_infinity); static_cast<void>(std::numeric_limits<T>::has_quiet_NaN); static_cast<void>(std::numeric_limits<T>::has_signaling_NaN); static_cast<void>(std::numeric_limits<T>::is_bounded); static_cast<void>(std::numeric_limits<T>::is_exact); static_cast<void>(std::numeric_limits<T>::is_iec559); static_cast<void>(std::numeric_limits<T>::is_integer); static_cast<void>(std::numeric_limits<T>::is_modulo); static_cast<void>(std::numeric_limits<T>::is_signed); static_cast<void>(std::numeric_limits<T>::is_specialized); static_cast<void>(std::numeric_limits<T>::tinyness_before); static_cast<void>(std::numeric_limits<T>::traps); static_cast<void>(std::numeric_limits<T>::round_style); static_cast<void>(std::numeric_limits<T>::digits); static_cast<void>(std::numeric_limits<T>::digits10); static_cast<void>(std::numeric_limits<T>::max_exponent); static_cast<void>(std::numeric_limits<T>::max_exponent10); static_cast<void>(std::numeric_limits<T>::min_exponent); static_cast<void>(std::numeric_limits<T>::min_exponent10); static_cast<void>(std::numeric_limits<T>::radix); static_cast<void>(std::numeric_limits<T>::denorm_min()); static_cast<void>(std::numeric_limits<T>::epsilon()); static_cast<void>(std::numeric_limits<T>::infinity()); static_cast<void>(std::numeric_limits<T>::max()); static_cast<void>(std::numeric_limits<T>::min()); static_cast<void>(std::numeric_limits<T>::quiet_NaN()); static_cast<void>(std::numeric_limits<T>::round_error()); static_cast<void>(std::numeric_limits<T>::signaling_NaN()); } template <void (*) ()> struct enforce { }; template struct enforce< test_numeric_limits<char> >; template struct enforce< test_numeric_limits<unsigned char> >; template struct enforce< test_numeric_limits<signed char> >; template struct enforce< test_numeric_limits<unsigned short> >; template struct enforce< test_numeric_limits<signed short> >; template struct enforce< test_numeric_limits<unsigned int> >; template struct enforce< test_numeric_limits<signed int> >; template struct enforce< test_numeric_limits<unsigned long> >; template struct enforce< test_numeric_limits<signed long> >; template struct enforce< test_numeric_limits<float> >; template struct enforce< test_numeric_limits<double> >; template struct enforce< test_numeric_limits<long double> >; template struct enforce< test_numeric_limits<void *> >; } |