File indexing completed on 2025-01-31 10:02:38
0001
0002
0003
0004
0005
0006
0007 #if !defined(BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM)
0008 #define BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM
0009
0010 #include <boost/config.hpp>
0011 #include <boost/mpl/bool.hpp>
0012 #include <limits>
0013
0014 namespace boost { namespace spirit { namespace x3 { namespace traits
0015 {
0016
0017
0018
0019 template <typename T>
0020 struct is_bool : mpl::false_ {};
0021
0022 template <typename T>
0023 struct is_bool<T const> : is_bool<T> {};
0024
0025 template <>
0026 struct is_bool<bool> : mpl::true_ {};
0027
0028
0029
0030
0031 template <typename T>
0032 struct is_int : mpl::false_ {};
0033
0034 template <typename T>
0035 struct is_int<T const> : is_int<T> {};
0036
0037 template <>
0038 struct is_int<short> : mpl::true_ {};
0039
0040 template <>
0041 struct is_int<int> : mpl::true_ {};
0042
0043 template <>
0044 struct is_int<long> : mpl::true_ {};
0045
0046 #ifdef BOOST_HAS_LONG_LONG
0047 template <>
0048 struct is_int<boost::long_long_type> : mpl::true_ {};
0049 #endif
0050
0051
0052
0053
0054 template <typename T>
0055 struct is_uint : mpl::false_ {};
0056
0057 template <typename T>
0058 struct is_uint<T const> : is_uint<T> {};
0059
0060 #if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
0061 template <>
0062 struct is_uint<unsigned short> : mpl::true_ {};
0063 #endif
0064
0065 template <>
0066 struct is_uint<unsigned int> : mpl::true_ {};
0067
0068 template <>
0069 struct is_uint<unsigned long> : mpl::true_ {};
0070
0071 #ifdef BOOST_HAS_LONG_LONG
0072 template <>
0073 struct is_uint<boost::ulong_long_type> : mpl::true_ {};
0074 #endif
0075
0076
0077
0078
0079 template <typename T>
0080 struct is_real : mpl::false_ {};
0081
0082 template <typename T>
0083 struct is_real<T const> : is_uint<T> {};
0084
0085 template <>
0086 struct is_real<float> : mpl::true_ {};
0087
0088 template <>
0089 struct is_real<double> : mpl::true_ {};
0090
0091 template <>
0092 struct is_real<long double> : mpl::true_ {};
0093
0094
0095
0096
0097 template <typename T, typename Enable = void>
0098 struct absolute_value;
0099
0100 template <typename T, typename Enable = void>
0101 struct is_negative;
0102
0103 template <typename T, typename Enable = void>
0104 struct is_zero;
0105
0106 template <typename T, typename Enable = void>
0107 struct pow10_helper;
0108
0109 template <typename T, typename Enable = void>
0110 struct is_nan;
0111
0112 template <typename T, typename Enable = void>
0113 struct is_infinite;
0114
0115 template <typename T, typename Enable = void>
0116 struct check_overflow : mpl::bool_<std::numeric_limits<T>::is_bounded> {};
0117 }}}}
0118
0119 #endif