<type_traits>
Définit des modèles pour les constantes au moment de la compilation qui fournissent des informations sur les propriétés de leurs arguments de type ou produisent des types transformés.
Syntaxe
#include <type_traits>
Notes
Les classes et les modèles de <type_traits> sont utilisés pour prendre en charge l’inférence, la classification et la transformation de type au moment de la compilation. Ils sont également utilisés pour détecter les erreurs liées au type et vous aider à optimiser votre code générique. Les caractéristiques de type unaire décrivent une propriété d’un type, les caractéristiques de type binaire décrivent une relation entre les types et les caractéristiques de transformation modifient une propriété d’un type.
La classe integral_constant
d’assistance et ses spécialisations true_type
de modèle et false_type
forment les classes de base pour les prédicats de type. Un prédicat de type est un modèle qui accepte un ou plusieurs arguments de type. Lorsqu’un prédicat de type est vrai, il est dérivé publiquement, directement ou indirectement, de true_type. Lorsqu’un prédicat de type contient false, il est dérivé publiquement, directement ou indirectement, de false_type.
Un modificateur de type ou une caractéristique de transformation est un modèle qui accepte un ou plusieurs arguments de modèle et possède un seul membre type
, qui est un synonyme du type modifié.
Modèles d'alias
Pour simplifier les expressions de caractéristiques de type, les modèles d’alias sont typename some_trait<T>::type
fournis, où some_trait est le nom du modèle de classe. Par exemple, add_const a un modèle d’alias pour son type, add_const_t
, défini comme suit :
template <class T>
using add_const_t = typename add_const<T>::type;
Voici les alias fournis pour les type
membres :
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
Typedefs et classe d’assistance
Nom | Description |
---|---|
integral_constant | Crée une constante intégrale à partir d’un type et d’une valeur. |
true_type | Contient une constante intégrale avec la valeur true. |
false_type | Contient une constante intégrale avec la valeur false. |
Catégories de type principal
Nom | Description |
---|---|
is_void | Teste si le type est void . |
is_null_pointer | Teste si le type est std::nullptr_t . |
is_integral | Teste si le type est intégral. |
is_floating_point | Teste si le type est à virgule flottante. |
is_array | Teste si le type est un tableau. |
is_pointer | Teste si le type est un pointeur. |
is_lvalue_reference | Teste si le type est une référence lvalue. |
is_rvalue_reference | Teste si le type est une référence rvalue. |
is_member_object_pointer | Teste si le type est un pointeur vers un objet membre. |
is_member_function_pointer | Teste si le type est un pointeur vers une fonction membre. |
is_enum | Teste si le type est une énumération. |
is_union | Teste si le type est une union. |
is_class | Teste si le type est une classe. |
is_function | Teste si le type est un type de fonction. |
Catégories de type composite
Nom | Description |
---|---|
is_reference | Teste si le type est une référence. |
is_arithmetic | Teste si le type est arithmétique. |
is_fundamental | Teste si le type est void ou arithmétique. |
is_object | Teste si le type est un type d'objet. |
is_scalar | Teste si le type est scalaire. |
is_compound | Teste si le type n'est pas scalaire. |
is_member_pointer | Teste si le type est un pointeur vers un membre. |
Propriétés type
Nom | Description |
---|---|
is_const | Teste si le type est const . |
is_volatile | Teste si le type est volatile . |
is_trivial | Teste si le type est trivial. |
is_trivially_copyable | Teste si le type peut être copié de façon triviale. |
is_standard_layout | Teste si le type est un type de disposition standard. |
is_pod | Teste si le type est POD. |
is_literal_type | Teste si le type peut être une variable constexpr ou peut être utilisé dans une fonction constexpr . |
is_empty | Teste si le type est une classe vide. |
is_polymorphic | Teste si le type est une classe polymorphe. |
is_abstract | Teste si le type est une classe abstraite. |
is_final | Teste si le type est un type de classe marqué final . |
is_aggregate | |
is_signed | Teste si le type est un entier signé. |
is_unsigned | Teste si le type est un entier non signé. |
is_constructible | Teste si le type est constructible à l’aide des types d’argument spécifiés. |
is_default_constructible | Teste si le type a un constructeur par défaut. |
is_copy_constructible | Teste si le type a un constructeur de copie. |
is_move_constructible | Teste si le type a un constructeur de déplacement. |
is_assignable | Teste si le premier type peut se voir assigner une valeur du second type. |
is_copy_assignable | Teste si un type peut se voir assigner une valeur de référence const du type. |
is_move_assignable | Teste si un type peut se voir assigner une référence rvalue du type. |
is_swappable | |
is_swappable_with | |
is_destructible | Teste si le type est destructible. |
is_trivially_constructible | Teste si le type n’utilise aucune opération non triviale lorsqu’il est construit à l’aide des types spécifiés. |
is_trivially_default_constructible | Teste si le type n’utilise aucune opération non triviale lorsqu’il est construit par défaut. |
is_trivially_copy_constructible | Teste si le type n’utilise aucune opération non triviale lorsqu’il est construit par copie. |
is_trivially_move_constructible | Teste si le type n’utilise aucune opération non triviale lorsqu’il est construit par déplacement. |
is_trivially_assignable | Teste si les types peuvent être assignés et si l’assignation n’utilise aucune opération non triviale. |
is_trivially_copy_assignable | Teste si le type peut être assigné par copie et si l’assignation n’utilise aucune opération non triviale. |
is_trivially_move_assignable | Teste si le type peut être assigné par déplacement et si l’assignation n’utilise aucune opération non triviale. |
is_trivially_destructible | Teste si le type est destructible et si le destructeur n’utilise aucune opération non triviale. |
is_nothrow_constructible | Teste si le type est constructible et est connu comme ne levant pas d’exception quand il est construit à l’aide des types spécifiés. |
is_nothrow_default_constructible | Teste si le type est constructible par défaut et connu comme ne levant pas d’exception lorsqu’il est construit par défaut. |
is_nothrow_copy_constructible | Teste si le type est constructible par copie et si le constructeur de copie est connu comme ne levant pas d’exception. |
is_nothrow_move_constructible | Teste si le type est constructible par déplacement et si le constructeur de déplacement est connu comme ne levant pas d’exception. |
is_nothrow_assignable | Teste si le type peut être assigné à l’aide du type spécifié et si l’assignation est connue comme ne levant pas d’exception. |
is_nothrow_copy_assignable | Teste si le type peut être assigné par copie et si l’assignation est connue comme ne levant pas d’exception. |
is_nothrow_move_assignable | Teste si le type peut être assigné par déplacement et si l’assignation est connue comme ne levant pas d’exception. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Teste si le type est destructible et si le destructeur est connu comme ne levant pas d’exception. |
has_virtual_destructor |
Teste si le type a un destructeur virtuel. |
has_unique_object_representations |
|
is_invocable | Teste si un type pouvant être appelé peut être appelé à l’aide des types d’arguments spécifiés. Ajouté dans C++17. |
is_invocable_r | Teste si un type pouvant être appelé peut être appelé à l’aide des types d’arguments spécifiés et que le résultat est convertible en type spécifié. Ajouté dans C++17. |
is_nothrow_invocable | Teste si un type pouvant être appelé peut être appelé à l’aide des types d’arguments spécifiés et est connu pour ne pas lever d’exceptions. Ajouté dans C++17. |
is_nothrow_invocable_r | Teste si un type pouvant être appelé peut être appelé à l’aide des types d’arguments spécifiés et est connu pour ne pas lever d’exceptions, et le résultat est convertible en type spécifié. Ajouté dans C++17. |
Requêtes de propriétés de type
Nom | Description |
---|---|
alignment_of | Obtient l’alignement d’un type. |
rank | Obtient le nombre de dimensions de tableau. |
extent | Obtient le nombre d’éléments dans la dimension de tableau spécifiée. |
Relations de types
Nom | Description |
---|---|
is_same | Teste si deux types sont identiques. |
is_base_of | Teste si un type est une base d’un autre. |
is_convertible | Teste si un type est convertible en un autre. |
Modifications const-volatile
Nom | Description |
---|---|
add_const | Génère un type const à partir d’un type. |
add_volatile | Génère un type volatile à partir d’un type. |
add_cv | Génère un type const volatile à partir d’un type. |
remove_const | Génère un type non const à partir d’un type. |
remove_volatile | Génère un type non volatile à partir d’un type. |
remove_cv | Génère un type non const non volatile à partir d’un type. |
Modifications de référence
Nom | Description |
---|---|
add_lvalue_reference | Génère une référence vers un type à partir d’un type. |
add_rvalue_reference | Génère une référence rvalue vers un type à partir d’un type. |
remove_reference | Génère un type non-référence à partir d’un type. |
Modifications de signe
Nom | Description |
---|---|
make_signed | Génère le type si signé, ou le plus petit type signé supérieur ou égal en taille au type. |
make_unsigned | Génère le type si non signé, ou le plus petit type non signé supérieur ou égal en taille au type. |
Modifications de tableau
Nom | Description |
---|---|
remove_all_extents | Génère un type non-tableau à partir d’un type tableau. |
remove_extent | Génère le type d’élément à partir d’un type tableau. |
Modifications de pointeur
Nom | Description |
---|---|
add_pointer | Génère un pointeur vers un type à partir d’un type. |
remove_pointer | Génère un type à partir d’un pointeur vers un type. |
Autres transformations
Nom | Description |
---|---|
aligned_storage | Alloue la mémoire non initialisée pour un type aligné. |
aligned_union | Alloue la mémoire non initialisée pour une union alignée avec un constructeur ou un destructeur non trivial. |
common_type | Génère le type commun de tous les types du package de paramètres. |
conditional | Si la condition est true, génère le premier type spécifié, sinon le second type spécifié. |
decay | Génère le type comme passé par la valeur. Crée un type non-référence, non const ou non volatile, ou crée un pointeur vers un type. |
enable_if | Si la condition est true, génère le type spécifié, sinon ne génère aucun type. |
invoke_result | Détermine le type de retour du type pouvant être appelé qui accepte les types d’argument spécifiés. Ajouté dans C++17. |
result_of | Détermine le type de retour du type pouvant être appelé qui accepte les types d’argument spécifiés. Ajouté en C++14, déconseillé en C++17. |
underlying_type | Génère le type intégral sous-jacent pour un type d’énumération. |
Caractéristiques d’opérateur logique
Nom | Description |
---|---|
conjonction | |
disjonction | |
négation |