Namespaces
Variants
Actions

Metaprogramming library (since C++11)

From cppreference.com
< cpp
 
 
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Type properties
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(until C++20*)
(C++11)(deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
(C++11)(C++11)(C++11)
Type transformations
(C++11)(deprecated in C++23)
(C++11)(deprecated in C++23)
(C++11)
(C++11)(until C++20*)(C++17)

(C++11)
(C++17)
Compile-time rational arithmetic
Compile-time integer sequences
 

C++ provides metaprogramming facilities, such as type traits, compile-time rational arithmetic, and compile-time integer sequences.

Contents

[edit] Definitions

The following types are collectively called referenceable types:

For any referenceable type T, a reference to it can be created[1].

  1. For reference types, this can be done via reference collapsing.

[edit] Type traits

Type traits define compile-time template-based interfaces to query the properties of types.

Attempting to specialize a template defined in the <type_traits> header and listed in this page results in undefined behavior, except that std::common_type and std::basic_common_reference(since C++20) may be specialized as required in 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.

[edit] Base classes

Most of non-transforming type traits need to be publicly and unambiguously derived from std::integral_constant in order to satisfy the requirements of UnaryTypeTrait or BinaryTypeTrait.

Defined in header <type_traits>
compile-time constant of specified type with specified value
(class template) [edit]

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] Unary type traits

Unary type traits can be used to query the boolean properties of a type at compile time.

All these type traits satisfy UnaryTypeTrait, the base characteristic of each type trait is either std::true_type or std::false_type, depending on whether the corresponding condition is met.

Primary type categories
Defined in header <type_traits>
(C++11)
checks if a type is void
(class template) [edit]
(C++11)(DR*)
checks if a type is std::nullptr_t
(class template) [edit]
checks if a type is an integral type
(class template) [edit]
checks if a type is a floating-point type
(class template) [edit]
(C++11)
checks if a type is an array type
(class template) [edit]
(C++11)
checks if a type is an enumeration type
(class template) [edit]
(C++11)
checks if a type is a union type
(class template) [edit]
(C++11)
checks if a type is a non-union class type
(class template) [edit]
checks if a type is a function type
(class template) [edit]
checks if a type is a pointer type
(class template) [edit]
checks if a type is an lvalue reference
(class template) [edit]
checks if a type is an rvalue reference
(class template)