| #ifndef TRAITS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |
| #define TRAITS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |
| |
| #if defined(_MSC_VER) || \ |
| (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ |
| (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 |
| #pragma once |
| #endif |
| |
| namespace YAML { |
| template <typename> |
| struct is_numeric { |
| enum { value = false }; |
| }; |
| |
| template <> |
| struct is_numeric<char> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<unsigned char> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<int> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<unsigned int> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<long int> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<unsigned long int> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<short int> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<unsigned short int> { |
| enum { value = true }; |
| }; |
| #if defined(_MSC_VER) && (_MSC_VER < 1310) |
| template <> |
| struct is_numeric<__int64> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<unsigned __int64> { |
| enum { value = true }; |
| }; |
| #else |
| template <> |
| struct is_numeric<long long> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<unsigned long long> { |
| enum { value = true }; |
| }; |
| #endif |
| template <> |
| struct is_numeric<float> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<double> { |
| enum { value = true }; |
| }; |
| template <> |
| struct is_numeric<long double> { |
| enum { value = true }; |
| }; |
| |
| template <bool, class T = void> |
| struct enable_if_c { |
| typedef T type; |
| }; |
| |
| template <class T> |
| struct enable_if_c<false, T> {}; |
| |
| template <class Cond, class T = void> |
| struct enable_if : public enable_if_c<Cond::value, T> {}; |
| |
| template <bool, class T = void> |
| struct disable_if_c { |
| typedef T type; |
| }; |
| |
| template <class T> |
| struct disable_if_c<true, T> {}; |
| |
| template <class Cond, class T = void> |
| struct disable_if : public disable_if_c<Cond::value, T> {}; |
| } |
| |
| #endif // TRAITS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |