|
|
|
@ -139,18 +139,10 @@ template<> struct is_integral<int> : true_type { }; |
|
|
|
|
template<> struct is_integral<unsigned int> : true_type { }; |
|
|
|
|
template<> struct is_integral<long> : true_type { }; |
|
|
|
|
template<> struct is_integral<unsigned long> : true_type { }; |
|
|
|
|
#ifdef HAVE_LONG_LONG |
|
|
|
|
#if defined(HAVE_LONG_LONG) || defined(_MSC_VER) |
|
|
|
|
template<> struct is_integral<long long> : true_type { }; |
|
|
|
|
template<> struct is_integral<unsigned long long> : true_type { }; |
|
|
|
|
#endif |
|
|
|
|
#if defined(_MSC_VER) |
|
|
|
|
// With VC, __int8, __int16, and __int32 are synonymous with standard types
|
|
|
|
|
// with the same size, but __int64 has not equivalent (i.e., it's neither
|
|
|
|
|
// long, nor long long and should be treated differnetly).
|
|
|
|
|
// https://msdn.microsoft.com/en-us/library/29dh1w7z.aspx
|
|
|
|
|
template<> struct is_integral<__int64> : true_type { }; |
|
|
|
|
template<> struct is_integral<unsigned __int64> : true_type {}; |
|
|
|
|
#endif |
|
|
|
|
template <class T> struct is_integral<const T> : is_integral<T> { }; |
|
|
|
|
template <class T> struct is_integral<volatile T> : is_integral<T> { }; |
|
|
|
|
template <class T> struct is_integral<const volatile T> : is_integral<T> { }; |
|
|
|
|