<type_traits>
Defines templates for compile-time constants that give information about the properties of their type arguments, or produce transformed types.
Syntax
#include <type_traits>
Remarks
The classes and templates in <type_traits> are used to support type inference, classification, and transformation at compile time. They are also used to detect type-related errors, and to help you optimize your generic code. Unary type traits describe a property of a type, binary type traits describe a relationship between types, and transformation traits modify a property of a type.
The helper class integral_constant
and its template specializations true_type
and false_type
form the base classes for type predicates. A type predicate is a template that takes one or more type arguments. When a type predicate holds true, it's publicly derived, directly or indirectly, from true_type. When a type predicate holds false, it's publicly derived, directly or indirectly, from false_type.
A type modifier or transformation trait is a template that takes one or more template arguments and has one member, type
, which is a synonym for the modified type.
Alias Templates
To simplify type traits expressions, alias templates for typename some_trait<T>::type
are provided, where some_trait is the class template name. For example, add_const has an alias template for its type, add_const_t
, defined as:
template <class T>
using add_const_t = typename add_const<T>::type;
These are the provided aliases for the type
members:
add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t
\
common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t
\
remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t
\
Classes
Helper class and typedefs
Name | Description |
---|---|
integral_constant | Makes an integral constant from a type and a value. |
true_type | Holds integral constant with true value. |
false_type | Holds integral constant with false value. |
Primary type categories
Name | Description |
---|---|
is_void | Tests whether the type is void . |
is_null_pointer | Tests whether the type is std::nullptr_t . |
is_integral | Tests whether the type is integral. |
is_floating_point | Tests whether the type is floating-point. |
is_array | Tests whether the type is an array. |
is_pointer | Tests whether the type is a pointer. |
is_lvalue_reference | Tests if type is an lvalue reference. |
is_rvalue_reference | Tests if type is an rvalue reference. |
is_member_object_pointer | Tests whether the type is a pointer to a member object. |
is_member_function_pointer | Tests whether the type is a pointer to a member function. |
is_enum | Tests whether the type is an enumeration. |
is_union | Tests whether the type is a union. |
is_class | Tests whether the type is a class. |
is_function | Tests whether the type is a function type. |
Composite type categories
Name | Description |
---|---|
is_reference | Tests whether the type is a reference. |
is_arithmetic | Tests whether the type is arithmetic. |
is_fundamental | Tests whether the type is void or arithmetic. |
is_object | Tests whether the type is an object type. |
is_scalar | Tests whether the type is scalar. |
is_compound | Tests whether the type is not scalar. |
is_member_pointer | Tests whether the type is a pointer to a member. |
Type properties
Name | Description |
---|---|
is_const | Tests whether the type is const . |
is_volatile | Tests whether the type is volatile . |
is_trivial | Tests whether the type is trivial. |
is_trivially_copyable | Tests whether the type is trivially copyable. |
is_standard_layout | Tests if type is a standard layout type. |
is_pod | Tests whether the type is a POD. |
is_literal_type | Tests whether the type can be a constexpr variable or used in a constexpr function. |
is_empty | Tests whether the type is an empty class. |
is_polymorphic | Tests whether the type is a polymorphic class. |
is_abstract | Tests whether the type is an abstract class. |
is_final | Tests whether the type is a class type marked final . |
is_aggregate | |
is_signed | Tests whether the type is a signed integer. |
is_unsigned | Tests whether the type is an unsigned integer. |
is_constructible | Tests whether the type is constructible using the specified argument types. |
is_default_constructible | Tests whether the type has a default constructor. |
is_copy_constructible | Tests whether the type has a copy constructor. |
is_move_constructible | Tests whether the type has a move constructor. |
is_assignable | Tests whether the first type can be assigned a value of the second type. |
is_copy_assignable | Tests whether a type can be assigned a const reference value of the type. |
is_move_assignable | Tests whether a type can be assigned an rvalue reference of the type. |
is_swappable | |
is_swappable_with | |
is_destructible | Tests whether the type is destructible. |
is_trivially_constructible | Tests whether the type uses no non-trivial operations when constructed using the specified types. |
is_trivially_default_constructible | Tests whether the type uses no non-trivial operations when default constructed. |
is_trivially_copy_constructible | Tests whether the type uses no non-trivial operations when copy constructed. |
is_trivially_move_constructible | Tests whether the type uses no non-trivial operations when move constructed. |
is_trivially_assignable | Tests whether the types are assignable and the assignment uses no non-trivial operations. |
is_trivially_copy_assignable | Tests whether the type is copy assignable and the assignment uses no non-trivial operations. |
is_trivially_move_assignable | Tests whether the type is move assignable and the assignment uses no non-trivial operations. |
is_trivially_destructible | Tests whether the type is destructible and the destructor uses no non-trivial operations. |
is_nothrow_constructible | Tests whether the type is constructible and is known not to throw when constructed using the specified types. |
is_nothrow_default_constructible | Tests whether the type is default constructible and is known not to throw when default constructed. |
is_nothrow_copy_constructible | Tests whether the type is copy constructible and the copy constructor is known not to throw. |
is_nothrow_move_constructible | Tests whether the type is move constructible and the move constructor is known not to throw. |
is_nothrow_assignable | Tests whether the type is assignable using the specified type and the assignment is known not to throw. |
is_nothrow_copy_assignable | Tests whether the type is copy assignable and the assignment is known not to throw. |
is_nothrow_move_assignable | Tests whether the type is move assignable and the assignment is known not to throw. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Tests whether the type is destructible and the destructor is known not to throw. |
has_virtual_destructor |
Tests whether the type has a virtual destructor. |
has_unique_object_representations |
|
is_invocable | Tests whether a callable type can be invoked using the specified argument types. Added in C++17. |
is_invocable_r | Tests whether a callable type can be invoked using the specified argument types and the result is convertible to the specified type. Added in C++17. |
is_nothrow_invocable | Tests whether a callable type can be invoked using the specified argument types and is known not to throw exceptions. Added in C++17. |
is_nothrow_invocable_r | Tests whether a callable type can be invoked using the specified argument types and is known not to throw exceptions, and the result is convertible to the specified type. Added in C++17. |
Type property queries
Name | Description |
---|---|
alignment_of | Gets the alignment of a type. |
rank | Gets the number of array dimensions. |
extent | Gets the number of elements in the specified array dimension. |
Type relations
Name | Description |
---|---|
is_same | Tests whether two types are the same. |
is_base_of | Tests whether one type is a base of another. |
is_convertible | Tests whether one type is convertible to another. |
Const-volatile modifications
Name | Description |
---|---|
add_const | Produces a const type from type. |
add_volatile | Produces a volatile type from type. |
add_cv | Produces a const volatile type from type. |
remove_const | Produces a non-const type from type. |
remove_volatile | Produces a non-volatile type from type. |
remove_cv | Produces a non-const non-volatile type from type. |
Reference modifications
Name | Description |
---|---|
add_lvalue_reference | Produces a reference to type from type. |
add_rvalue_reference | Produces an rvalue reference to type from type |
remove_reference | Produces a non-reference type from type. |
Sign modifications
Name | Description |
---|---|
make_signed | Produces the type if signed, or the smallest signed type greater than or equal in size to type. |
make_unsigned | Produces the type if unsigned, or the smallest unsigned type greater than or equal in size to type. |
Array modifications
Name | Description |
---|---|
remove_all_extents | Produces a non-array type from an array type. |
remove_extent | Produces the element type from an array type. |
Pointer modifications
Name | Description |
---|---|
add_pointer | Produces a pointer to type from type. |
remove_pointer | Produces a type from a pointer to type. |
Other transformations
Name | Description |
---|---|
aligned_storage | Allocates uninitialized memory for an aligned type. |
aligned_union | Allocates uninitialized memory for an aligned union with a non-trivial constructor or destructor. |
common_type | Produces the common type of all the types of the parameter pack. |
conditional | If the condition is true, produces the first specified type, otherwise the second specified type. |
decay | Produces the type as passed by value. Makes non-reference, non-const, or non-volatile type, or makes a pointer to type. |
enable_if | If the condition is true, produces the specified type, otherwise no type. |
invoke_result | Determines the return type of the callable type that takes the specified argument types. Added in C++17. |
result_of | Determines the return type of the callable type that takes the specified argument types. Added in C++14, deprecated in C++17. |
underlying_type | Produces the underlying integral type for an enumeration type. |
Logical operator traits
Name | Description |
---|---|
conjunction | |
disjunction | |
negation |
See also
Feedback
https://aka.ms/ContentUserFeedback.
În curând: Pe parcursul anului 2024, vom elimina treptat Probleme legate de GitHub ca mecanism de feedback pentru conținut și îl vom înlocui cu un nou sistem de feedback. Pentru mai multe informații, consultați:Trimiteți și vizualizați feedback pentru