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