Type support (basic types, RTTI, type traits)
(See also type for type system overview)
Basic types
Fundamental types defined by the language
Additional basic types and macros
|   Defined in header  
<cstddef>  | |
|    unsigned integer type returned by the sizeof operator  (typedef)  | |
|    signed integer type returned when subtracting two pointers  (typedef)  | |
|    (C++11)  | 
   the type of the null pointer literal nullptr   (typedef)  | 
|    implementation-defined null pointer constant  (macro constant)  | |
|    (C++11)  | 
   trivial type with alignment requirement as great as any other scalar type   (typedef)  | 
|    byte offset from the beginning of a standard-layout type to specified member  (function macro)  | |
|    (C++17)  | 
   the byte type   (enum)  | 
|   Defined in header  
<cstdbool> (until C++20)  | |
|   Defined in header  
<stdbool.h>  | |
|    __bool_true_false_are_defined (C++11)  | 
   C compatibility macro constant, expands to integer constant 1  (macro constant)  | 
|   Defined in header  
<cstdalign> (until C++20)  | |
|   Defined in header  
<stdalign.h>  | |
|    __alignas_is_defined (C++11)  | 
   C compatibility macro constant, expands to integer constant 1  (macro constant)  | 
Fixed width integer types (since C++11)
Numeric limits
|   Defined in header  
<limits>  | |
|    provides an interface to query properties of all fundamental numeric types.  (class template)  | |
C numeric limits interface
Runtime type identification
|   Defined in header  
<typeinfo>  | |
|    contains some type's information, generated by the implementation. This is the class returned by the typeid operator. (class)  | |
|    exception that is thrown if an argument in a  typeid expression is null  (class)  | |
|    exception that is thrown by an invalid dynamic_cast expression, i.e. a cast of reference type fails  (class)  | |
|   Defined in header  
<typeindex>  | |
|    (C++11)  | 
   wrapper around a type_info object, that can be used as index in associative and unordered associative containers  (class)  | 
Type traits (since C++11)
Type traits defines a compile-time template-based interface to query or modify the properties of types.
Attempting to specialize a template defined in the <type_traits> header results in undefined behavior, except that std::common_type may be specialized as described in its description.
A template defined in the <type_traits> header may be instantiated with an incomplete type unless otherwise specified, notwithstanding the general prohibition against instantiating standard library templates with incomplete types.
Type properties
|   Defined in header  
<type_traits>  | |
 Primary type categories | |
|    (C++11)  | 
   checks if a type is void   (class template)  | 
|    (C++14)  | 
   checks if a type is std::nullptr_t   (class template)  | 
|    (C++11)  | 
   checks if a type is an integral type   (class template)  | 
|    (C++11)  | 
   checks if a type is a floating-point type   (class template)  | 
|    (C++11)  | 
   checks if a type is an array type   (class template)  | 
|    (C++11)  | 
   checks if a type is an enumeration type   (class template)  | 
|    (C++11)  | 
   checks if a type is an union type   (class template)  | 
|    (C++11)  | 
   checks if a type is a non-union class type   (class template)  | 
|    (C++11)  | 
   checks if a type is a function type   (class template)  | 
|    (C++11)  | 
   checks if a type is a pointer type   (class template)  | 
|    (C++11)  | 
   checks if a type is a lvalue reference   (class template)  | 
|    (C++11)  | 
   checks if a type is a rvalue reference   (class template)  | 
|    (C++11)  | 
   checks if a type is a pointer to a non-static member object   (class template)  | 
|    (C++11)  | 
   checks if a type is a pointer to a non-static member function   (class template)  | 
 Composite type categories | |
|    (C++11)  | 
   checks if a type is a fundamental type   (class template)  | 
|    (C++11)  | 
   checks if a type is an arithmetic type   (class template)  | 
|    (C++11)  | 
   checks if a type is a scalar type   (class template)  | 
|    (C++11)  | 
   checks if a type is an object type   (class template)  | 
|    (C++11)  | 
   checks if a type is a compound type   (class template)  | 
|    (C++11)  | 
   checks if a type is either a lvalue reference or rvalue reference   (class template)  | 
|    (C++11)  | 
   checks if a type is a pointer to an non-static member function or object   (class template)  | 
 Type properties | |
|    (C++11)  | 
   checks if a type is const-qualified   (class template)  | 
|    (C++11)  | 
   checks if a type is volatile-qualified   (class template)  | 
|    (C++11)  | 
   checks if a type is trivial   (class template)  | 
|    (C++11)  | 
   checks if a type is trivially copyable   (class template)  | 
|    (C++11)  | 
   checks if a type is a standard-layout type   (class template)  | 
|    (C++11)(deprecated in C++20)  | 
   checks if a type is a plain-old data (POD) type   (class template)  | 
|    (C++11)(deprecated in C++17)(removed in C++20)  | 
   checks if a type is a literal type   (class template)  | 
|    checks if every bit in the type's object representation contributes to its value   (class template)  | |
|    (C++11)  | 
   checks if a type is a class (but not union) type and has no non-static data members   (class template)  | 
|    (C++11)  | 
   checks if a type is a polymorphic class type   (class template)  | 
|    (C++11)  | 
   checks if a type is an abstract class type   (class template)  | 
|    (C++14)  | 
   checks if a type is a final class type   (class template)  | 
|    (C++17)  | 
   checks if a type is an aggregate type   (class template)  | 
|    (C++11)  | 
   checks if a type is a signed arithmetic type   (class template)  | 
|    (C++11)  | 
   checks if a type is an unsigned arithmetic type   (class template)  | 
|    (C++20)  | 
   checks if a type is an array type of known bound   (class template)  | 
|    (C++20)  | 
   checks if a type is an array type of unknown bound   (class template)  | 
 Supported operations | |
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a constructor for specific arguments   (class template)  | 
|    checks if a type has a default constructor   (class template)  | |
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a copy constructor   (class template)  | 
|    (C++11)(C++11)(C++11)  | 
   checks if a type can be constructed from an rvalue reference   (class template)  | 
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a assignment operator for a specific argument   (class template)  | 
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a copy assignment operator   (class template)  | 
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a move assignment operator   (class template)  | 
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a non-deleted destructor   (class template)  | 
|    (C++11)  | 
   checks if a type has a virtual destructor   (class template)  | 
|    (C++17)(C++17)(C++17)(C++17)  | 
   checks if objects of a type can be swapped with objects of same or different type  (class template)  | 
 Property queries | |
|    (C++11)  | 
   obtains the type's alignment requirements   (class template)  | 
|    (C++11)  | 
   obtains the number of dimensions of an array type   (class template)  | 
|    (C++11)  | 
   obtains the size of an array type along a specified dimension   (class template)  | 
 Type relationships | |
|    (C++11)  | 
   checks if two types are the same   (class template)  | 
|    (C++11)  | 
   checks if a type is derived from the other type   (class template)  | 
|    (C++11)(C++20)  | 
   checks if a type can be converted to the other type   (class template)  | 
|    checks if a type can be invoked (as if by std::invoke) with the given argument types   (class template)  | |
Type modifications
Type modification templates create new type definitions by applying modifications on a template parameter. The resulting type can then be accessed through type member typedef.
|   Defined in header  
<type_traits>  | |
 Const-volatility specifiers | |
|    (C++11)(C++11)(C++11)  | 
   removes const or/and volatile specifiers from the given type   (class template)  | 
|    (C++11)(C++11)(C++11)  | 
   adds const or/and volatile specifiers to the given type   (class template)  | 
 References | |
|    (C++11)  | 
   removes a reference from the given type   (class template)  | 
|    (C++11)(C++11)  | 
   adds a lvalue or rvalue reference to the given type   (class template)  | 
 Pointers | |
|    (C++11)  | 
   removes a pointer from the given type   (class template)  | 
|    (C++11)  | 
   adds a pointer to the given type   (class template)  | 
 Sign modifiers | |
|    (C++11)  | 
   makes the given integral type signed   (class template)  | 
|    (C++11)  | 
   makes the given integral type unsigned   (class template)  | 
 Arrays | |
|    (C++11)  | 
   removes one extent from the given array type   (class template)  | 
|    (C++11)  | 
   removes all extents from the given array type   (class template)  | 
Miscellaneous transformations
|   Defined in header  
<type_traits>  | |
|    (C++11)  | 
   defines the type suitable for use as uninitialized storage for types of given size   (class template)  | 
|    (C++11)  | 
   defines the type suitable for use as uninitialized storage for all given types   (class template)  | 
|    (C++11)  | 
   applies type transformations as when passing a function argument by value   (class template)  | 
|    (C++20)  | 
   combines std::remove_cv and std::remove_reference   (class template)  | 
|    (C++11)  | 
   hides a function overload or template specialization based on compile-time boolean   (class template)  | 
|    (C++11)  | 
   chooses one type or another based on compile-time boolean   (class template)  | 
|    (C++11)  | 
   determines the common type of a group of types   (class template)  | 
|    determines the common reference type of a group of types   (class template)  | |
|    (C++11)  | 
   obtains the underlying integer type for a given enumeration type   (class template)  | 
|    (C++11)(removed in C++20)(C++17)  | 
   deduces the result type of invoking a callable object with a set of arguments   (class template)  | 
|    (C++17)  | 
   void variadic alias template   (alias template)  | 
|    (C++20)  | 
   returns the type argument unchanged   (class template)  | 
Operations on traits
|   Defined in header  
<type_traits>  | |
|    (C++17)  | 
   variadic logical AND metafunction   (class template)  | 
|    (C++17)  | 
   variadic logical OR metafunction   (class template)  | 
|    (C++17)  | 
   logical NOT metafunction   (class template)  | 
Helper classes
|   Defined in header  
<type_traits>  | |
|    (C++11)(C++17)  | 
   compile-time constant of specified type with specified value    (class template)  | 
Two specializations of std::integral_constant for the type bool are provided:
|   Defined in header  
<type_traits>  | |
| Type | Definition | 
  true_type
 | 
std::integral_constant<bool, true> | 
  false_type
 | 
std::integral_constant<bool, false> | 
Endian (since C++20)
|   Defined in header  
<type_traits>  | |
| Type | Definition | 
|    (C++20)  | 
   indicates the endianness of scalar types   (enum)  | 
Constant evaluation context (since C++20)
|   Defined in header  
<type_traits>  | |
|    (C++20)  | 
   detects whether the call occurs within a constant-evaluated context   (function)  |