Type support (basic types, RTTI, type traits)
From cppreference.com
                    
                                        
                    < cpp
                    
                                                            
                    (See also type for type system overview)
Contents | 
[edit] Basic types
[edit] Fundamental types defined by the language
[edit] 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) 
 | 
   POD 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)  | 
|
|   Defined in header  
<cstdbool>  | 
|
|    __bool_true_false_are_defined 
(C++11) 
 | 
   C compatibility macro constant, expands to integer constant 1  (macro constant)  | 
|   Defined in header  
<cstdalign>  | 
|
|    __alignas_is_defined 
(C++11) 
 | 
   C compatibility macro constant, expands to integer constant 1  (macro constant)  | 
[edit] Fixed width integer types (since C++11)
[edit] numeric_limits
|   Defined in header  
<limits>  | 
|
|    provides an interface to query properties of all fundamental numeric types.  (class template)  | 
|
[edit] C numeric limits interface
[edit] Runtime type identification
|    contains some type's information, generated by the implementation. This is the class, returned by the typeid operator (class)  | 
|
|    (C++11) 
 | 
   wrapper around a type_info object, that can be used as index in associative and unordered associative containers  (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)  | 
[edit] Type traits (since C++11)
Type traits defines an compile-time template-based interface to query or modify the properties of types.
[edit] 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 integral type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is 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 class type (but not union 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 lvalue reference   (class template)  | 
|    (C++11) 
 | 
   checks if a type is 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 fundamental type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is arithmetic type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is scalar type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is object type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is compound type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is either lvalue reference or rvalue reference   (class template)  | 
|    (C++11) 
 | 
   checks if a type is a pointer to a 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 standard-layout type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is plain-old data (POD) type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is literal type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is class (but not union) type and has no data   (class template)  | 
|    (C++11) 
 | 
   checks if a type is polymorphic class type   (class template)  | 
|    (C++14) 
 | 
   checks if a type is a final class type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is abstract class type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is signed arithmetic type   (class template)  | 
|    (C++11) 
 | 
   checks if a type is unsigned arithmetic type   (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 has a move constructor   (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)  | 
 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) 
 | 
   checks if a type can be converted to the other type   (class template)  | 
[edit] 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 reference from the given type   (class template)  | 
|    (C++11)(C++11) 
 | 
   adds lvalue or rvalue reference to the given type   (class template)  | 
 Pointers | 
|
|    (C++11) 
 | 
   removes pointer from the given type   (class template)  | 
|    (C++11) 
 | 
   adds 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)  | 
[edit] 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++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-type boolean   (class template)  | 
|    (C++11) 
 | 
   deduces the result type of a mixed-mode arithmetic expression   (class template)  | 
|    (C++11) 
 | 
   obtains the underlying integer type for a given enumeration type   (class template)  | 
|    (C++11) 
 | 
   deduces the return type of a function call expression   (class template)  | 
[edit] Helper classes
|   Defined in header  
<type_traits>  | 
|
|    (C++11) 
 | 
   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> | 
[edit] See also
|   
C documentation for Type support library
 
 |