C++11 provides two type trait template classes: std::is_integer
and std::is_integral
. However, I cannot tell the differences between them.
What type, say T, can make std::is_integer<T>::value
true and make std::is_integral<T>::value
false?
std::is_integralTrait class that identifies whether T is an integral type. It inherits from integral_constant as being either true_type or false_type, depending on whether T is an integral type: fundamental integral types. bool. char.
bool is a one bit integral type. There are many integral types -- int , long , long long , std::uint32_t .
The integral types are: char , signed char , unsigned char -8 bits. short int , signed short int , and unsigned short int -16 bits.
std::is_integer<T>
does not exist.
That being said, std::numeric_limits<T>::is_integer
does exist.
I'm not aware of any significant difference between std::numeric_limits<T>::is_integer
and std::is_integral<T>
. The latter was designed much later and became standard in C++11, whereas the former was introduced in C++98.
There is no type T
that has different results for std::is_integral<T>::value
and std::numeric_limits<T>::is_integer
. To quote the draft Standard:
3.9.1 Fundamental types [basic.fundamental]
7 Types bool, char, char16_t, char32_t, wchar_t, and the signed and unsigned integer types are collectively called integral types. A synonym for integral type is integer type.[...]
18.3.2.4 numeric_limits members [numeric.limits.members]
static constexpr bool is_integer;
17 True if the type is integer.
20.9.4.1 Primary type categories [meta.unary.cat] (table 47)
template <class T> struct is_integral;
T is an integral type (3.9.1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With