Nous recommandons d’utiliser Visual Studio 2017

<type_traits>

 

Date de publication : novembre 2016

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Définit des modèles qui fournissent des constantes de compilation qui donnent des informations sur les propriétés de leurs arguments de type ou produisant transformé types.

#include <type_traits>  

Les classes et les modèles dans <type_traits> sont utilisés pour prendre en charge l’inférence de type, la classification et la transformation au moment de la compilation, pour détecter les erreurs liées au type et pour vous aider à optimiser votre code générique. Ces classes et les modèles incluent unaire traits de types qui décrivent une propriété d’un type, les caractéristiques de type binaire qui décrivent la relation entre les types et les caractéristiques de transformation que vous modifient une propriété d’un type.

Pour prendre en charge les caractéristiques de type, une classe d’assistance, integral_constant, est définie. Il possède des spécialisations de modèle true_type et false_type qui forment les classes de base pour les prédicats de type. A prédicat de type est un modèle qui prend un ou plusieurs arguments de type. Lorsqu’un prédicat de type vaut, il est publiquement dérivé, directement ou indirectement, à partir de true_type. Lorsqu’un prédicat de type est false, il est publiquement dérivé, directement ou indirectement, à partir de false_type.

A modificateur de type ou caractéristique de transformation est un modèle qui prend un ou plusieurs arguments de modèle et possède le membre type, qui est un synonyme du type modifié.

Modèles d'alias

Pour simplifier les expressions de caractéristiques de type, modèles d’alias de typename some_trait<T>::type sont fournis, où « some_trait» est le nom de classe de modèle. Par exemple, add_const a un modèle d’alias pour son type, add_const_t, défini comme :

template <class T>
using add_const_t = typename add_const<T>::type;

add_const_taligned_storage_tmake_signed_tremove_pointer_t
add_cv_taligned_union_tmake_unsigned_tremove_reference_t
add_lvalue_reference_tcommon_type_tremove_all_extents_tremove_volatile_t
add_pointer_tconditional_tremove_const_tresult_of_t
add_rvalue_reference_tdecay_tremove_cv_tunderlying_type_t
add_volatile_tenable_if_tremove_extent_t

Classes

Typedefs et classe d’assistance

integral_constantRend un intégral constant à partir d’un type et une valeur.
true_typeContient une constante intégrale avec la valeur true.
false_typeContient une constante intégrale avec la valeur false.

Catégories de type principal

is_voidTeste si le type est void.
is_null_pointerTeste si le type est std::nullptr_t.
is_integralTeste si le type est intégral.
is_floating_pointTeste si le type est à virgule flottante.
is_arrayTeste si le type est un tableau.
is_pointerTeste si le type est un pointeur.
is_lvalue_referenceTeste si le type est une référence lvalue.
is_rvalue_referenceTeste si le type est une référence rvalue.
is_member_object_pointerTeste si le type est un pointeur vers un objet membre.
is_member_function_pointerTeste si le type est un pointeur vers une fonction membre.
is_enumTeste si le type est une énumération.
is_unionTeste si le type est une union.
is_classTeste si le type est une classe.
is_functionTeste si le type est un type de fonction.

Catégories de type composite

is_referenceTeste si le type est une référence.
is_arithmeticTeste si le type est arithmétique.
is_fundamentalTeste si le type est void ou arithmétique.
is_objectTeste si le type est un type d'objet.
is_scalarTeste si le type est scalaire.
is_compoundTeste si le type n'est pas scalaire.
is_member_pointerTeste si le type est un pointeur vers un membre.

Propriétés de type

is_constTeste si le type est const.
is_volatileTeste si le type est volatile.
is_trivialTeste si le type est simple.
is_trivially_copyableTeste si le type est susceptible d’être simplement copié.
is_standard_layoutTeste si le type est un type de mise en forme standard.
is_podTeste si le type est POD.
is_literal_typeTeste si le type peut être un constexpr variable ou utilisées dans un constexpr (fonction).
is_emptyTeste si le type est une classe vide.
is_polymorphicTeste si le type est une classe polymorphe.
is_abstractTeste si le type est une classe abstraite.
is_finalTeste si le type est un type de classe marqué final.
is_signedTeste si le type est un entier signé.
is_unsignedTeste si le type est un entier non signé.
is_constructibleTeste si le type peut être construit à l’aide des types d’arguments spécifiés.
is_default_constructibleTeste si le type a un constructeur par défaut.
is_copy_constructibleTeste si le type a un constructeur de copie.
is_move_constructibleTeste si le type a un constructeur de déplacement.
is_assignableTeste si le premier type peut avoir une valeur du second type.
is_copy_assignableTeste si un type peut être affecté à une valeur de référence const de type.
is_move_assignableTeste si un type peut être assigné à une référence rvalue du type.
is_destructibleTeste si le type est destructible.
is_trivially_constructibleTeste si le type n’utilise aucune opération non triviale lorsque construite à l’aide des types spécifiés.
is_trivially_default_constructibleTeste si le type n’utilise aucune opération non triviale lors de la construction par défaut.
is_trivially_copy_constructibleTeste si le type n’utilise aucune opération non triviale lors de la construction de copie.
is_trivially_move_constructibleTeste si le type n’utilise aucune opération non triviale lors de la construction de déplacement.
is_trivially_assignableTeste si les types peuvent être assignés et l’affectation n’utilise aucune opération non triviale.
is_trivially_copy_assignableTeste si le type n’est assignable copie et l’affectation utilise aucune opération non triviale.
is_trivially_move_assignableTeste si le type n’est assignable de déplacement et l’affectation utilise aucune opération non triviale.
is_trivially_destructibleTeste si le type est destructibles et le destructeur n’utilise aucune opération non triviale.
is_nothrow_constructibleTeste si le type est constructible et ne connaît ne pas lever lorsque construite à l’aide des types spécifiés.
is_nothrow_default_constructibleTests si le type est default constructible et ne connaît ne pas lever lors de la construction par défaut.
is_nothrow_copy_constructibleTeste si le type est constructible copie et le constructeur de copie ne connaît ne pas lever.
is_nothrow_move_constructibleTeste si le type est constructible déplacement et le constructeur de déplacement ne connaît ne pas lever.
is_nothrow_assignableTeste si le type ne peut être assigné à l’aide du type spécifié et l’affectation ne connaît ne pas lever.
is_nothrow_copy_assignableTeste si le type est assignable copie et l’affectation ne connaît ne pas lever.
is_nothrow_move_assignableTeste si le type est assignable de déplacement et l’affectation ne connaît ne pas lever.
is_nothrow_destructibleTeste si le type est destructibles et le destructeur ne connaît ne pas lever.
has_virtual_destructorTeste si le type a un destructeur virtuel.

Requêtes de propriété de type

alignment_ofObtient l’alignement d’un type.
rangObtient le nombre de dimensions de tableau.
étendueObtient le nombre d’éléments dans la dimension du tableau spécifié.

Relations de type

is_sameTeste si deux types sont identiques.
is_base_ofTeste si un type est une base d’un autre.
is_convertibleTeste si un type est convertible en un autre.

Modifications de const-volatile

add_constGénère un const type type.
add_volatileGénère un volatile type type.
add_cvGénère un const``volatile type type.
remove_constGénère un type non-const de type.
remove_volatileGénère un type non volatile du type.
remove_cvGénère un type non volatile de non-const de type.

Modifications de la référence

add_lvalue_referenceGénère une référence au type du type.
add_rvalue_referenceGénère une référence rvalue au type à partir du type
remove_referenceGénère un type sans référence de type.

Modifications de l’authentification

make_signedGénère le type si connecté ou le plus petit type signé supérieur ou égal en taille au type.
make_unsignedGénère le type si non signées ou le plus petit type non signé supérieur ou égal en taille au type.

Modifications de tableau

remove_all_extentsGénère un type non-tableau à partir d’un type tableau.
remove_extentGénère le type d’élément d’un type tableau.

Modifications de pointeur

add_pointerGénère un pointeur vers le type du type.
remove_pointerGénère un type d’un pointeur vers le type.

Autres transformations

aligned_storageAlloue la mémoire non initialisée pour un type aligné.
aligned_unionAlloue la mémoire non initialisée pour une union alignée avec un constructeur ou un destructeur non trivial.
common_typeGénère le type commun de tous les types du pack de paramètre.
conditionnelSi la condition est true, génère le premier type spécifié, sinon le second type spécifié.
atténuationGénère le type passés par valeur. Crée un type non-référence, non const ou non volatile, ou crée un pointeur vers un type.
enable_ifSi la condition est true, ne génère le type spécifié, sinon aucun type.
result_ofDétermine le type de retour de type peut être appelé qui accepte les types d’arguments spécifiés.
underlying_typeGénère le type intégral sous-jacent pour un type d’énumération.

<>>

Afficher: