Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
Defined in header <type_traits> | ||
template<class T> struct is_integral; | (since C++11) | |
std::is_integral
is aUnaryTypeTrait.
Checks whetherT
is anintegral type. Provides the member constantvalue which is equal totrue, ifT
is the typebool,char,char8_t(since C++20),char16_t,char32_t,wchar_t,short,int,long,longlong, or any implementation-defined extended integer types, including any signed, unsigned, and cv-qualified variants. Otherwise,value is equal tofalse.
If the program adds specializations forstd::is_integral
orstd::is_integral_v
, the behavior is undefined.
Contents |
T | - | a type to check |
template<class T> constexprbool is_integral_v= is_integral<T>::value; | (since C++17) | |
value [static] | true ifT is an integral type,false otherwise(public static member constant) |
operator bool | converts the object tobool, returnsvalue (public member function) |
operator() (C++14) | returnsvalue (public member function) |
Type | Definition |
value_type | bool |
type | std::integral_constant<bool, value> |
// Note: this implementation uses C++20 facilitiestemplate<class T>struct is_integral:std::bool_constant< requires(T t, T* p,void(*f)(T))// T* parameter excludes reference types{reinterpret_cast<T>(t);// Exclude class types f(0);// Exclude enumeration types p+ t;// Exclude everything not yet excluded but integral types}>{}; |
#include <type_traits> static_assert( std::is_integral_v<float>==false&& std::is_integral_v<int*>==false&& std::is_integral_v<int>==true&& std::is_integral_v<constint>==true&& std::is_integral_v<bool>==true&& std::is_integral_v<char>==true); class A{};static_assert(std::is_integral_v<A>==false); struct B{int x:4;};static_assert(std::is_integral_v<B>==false);using BF= decltype(B::x);// bit-field's typestatic_assert(std::is_integral_v<BF>==true); enum E:int{};static_assert(std::is_integral_v<E>==false); template<class T>constexpr T same(T i){ static_assert(std::is_integral<T>::value,"Integral required.");return i;}static_assert(same('"')==042); int main(){}
(C++20) | specifies that a type is an integral type (concept)[edit] |
[static] | identifies integer types (public static member constant of std::numeric_limits<T> )[edit] |
(C++11) | checks if a type is a floating-point type (class template)[edit] |
(C++11) | checks if a type is an arithmetic type (class template)[edit] |
(C++11) | checks if a type is an enumeration type (class template)[edit] |