Share via


<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

Voir aussi

<functional>