<type_traits>

Definisce i modelli per le costanti in fase di compilazione che forniscono informazioni sulle proprietà dei relativi argomenti di tipo o producono tipi trasformati.

Sintassi

#include <type_traits>

Osservazioni:

Le classi e i modelli in <type_traits> vengono usati per supportare l'inferenza, la classificazione e la trasformazione dei tipi in fase di compilazione. Vengono usati anche per rilevare gli errori correlati al tipo e per ottimizzare il codice generico. I tratti di tipo unario descrivono una proprietà di un tipo, i tratti di tipo binario descrivono una relazione tra tipi e tratti di trasformazione modificano una proprietà di un tipo.

La classe integral_constant helper e le true_type relative specializzazioni di modello e false_type formano le classi di base per i predicati di tipo. Un predicato di tipo è un modello che accetta uno o più argomenti di tipo. Quando un predicato di tipo contiene true, viene derivato pubblicamente, direttamente o indirettamente, da true_type. Quando un predicato di tipo contiene false, viene derivato pubblicamente, direttamente o indirettamente, da false_type.

Un modificatore di tipo o tratto di trasformazione è un modello che accetta uno o più argomenti di modello e include un membro, type, che è sinonimo di tipo modificato.

Modelli di alias

Per semplificare le espressioni dei tratti di tipo, vengono forniti modelli di alias per typename some_trait<T>::type , dove some_trait è il nome del modello di classe. Ad esempio, add_const include il modello di alias per il rispettivo tipo add_const_t, definito come:

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

Questi sono gli alias forniti per i type membri:

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\

Classi

Classi helper e typedef

Nome Descrizione
integral_constant Crea una costante integrale da un tipo e da un valore.
true_type Include la costante integrale con valore true.
false_type Include la costante integrale con valore false.

Categorie di tipi primari

Nome Descrizione
is_void Verifica se il tipo è void.
is_null_pointer Verifica se il tipo è std::nullptr_t.
is_integral Verifica se il tipo è integrale.
is_floating_point Verifica se il tipo è a virgola mobile.
is_array Verifica se il tipo è una matrice.
is_pointer Verifica se il tipo è un puntatore.
is_lvalue_reference Verifica se il tipo è un riferimento lvalue.
is_rvalue_reference Verifica se il tipo è un riferimento rvalue.
is_member_object_pointer Verifica se il tipo è un puntatore a un oggetto membro.
is_member_function_pointer Verifica se il tipo è un puntatore a una funzione membro.
is_enum Verifica se il tipo è un'enumerazione.
is_union Verifica se il tipo è un'unione.
is_class Verifica se il tipo è una classe.
is_function Verifica se il tipo è un tipo di funzione.

Categorie di tipi compositi

Nome Descrizione
is_reference Verifica se il tipo è un riferimento.
is_arithmetic Verifica se il tipo è aritmetico.
is_fundamental Verifica se il tipo è void o aritmetico.
is_object Verifica se il tipo è un tipo di oggetto.
is_scalar Verifica se il tipo è scalare.
is_compound Verifica se il tipo non è scalare.
is_member_pointer Verifica se il tipo è un puntatore a un membro.

Proprietà del tipo

Nome Descrizione
is_const Verifica se il tipo è const.
is_volatile Verifica se il tipo è volatile.
is_trivial Verifica se il tipo è semplice.
is_trivially_copyable Verifica se il tipo è facilmente copiabile.
is_standard_layout Verifica se il tipo è un tipo di layout standard.
is_pod Verifica se il tipo è un POD.
is_literal_type Verifica se il tipo può essere una variabile constexpr o usato in una funzione constexpr.
is_empty Verifica se il tipo è una classe vuota.
is_polymorphic Verifica se il tipo è una classe polimorfica.
is_abstract Verifica se il tipo è una classe astratta.
is_final Verifica se il tipo è un tipo di classe contrassegnato come final.
is_aggregate
is_signed Verifica se il tipo è un intero con segno.
is_unsigned Verifica se il tipo è un intero senza segno.
is_constructible Verifica se il tipo è costruibile mediante i tipi di argomento specificati.
is_default_constructible Verifica se il tipo ha un costruttore predefinito.
is_copy_constructible Verifica se il tipo ha un costruttore di copia.
is_move_constructible Verifica se il tipo ha un costruttore di spostamento.
is_assignable Verifica se al primo tipo può essere assegnato un valore del secondo tipo.
is_copy_assignable Verifica se al primo tipo può essere assegnato un valore del secondo tipo.
is_move_assignable Verifica se al primo tipo può essere assegnato un riferimento rvalue del tipo.
is_swappable
is_swappable_with
is_destructible Verifica se il tipo è destructible.
is_trivially_constructible Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito mediante i tipi specificati.
is_trivially_default_constructible Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito per impostazione predefinita.
is_trivially_copy_constructible Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito mediante copia.
is_trivially_move_constructible Verifica se il tipo non usa alcuna operazione non semplice quando viene costruito mediante spostamento.
is_trivially_assignable Verifica se i tipi sono assegnabili e se l'assegnazione non usa alcuna operazione non semplice.
is_trivially_copy_assignable Verifica se il tipo è assegnabile mediante copia e se l'assegnazione non usa alcuna operazione non semplice.
is_trivially_move_assignable Verifica se il tipo è assegnabile mediante spostamento e se l'assegnazione non usa alcuna operazione non semplice.
is_trivially_destructible Verifica se il tipo è distruttibile e se il distruttore non usa alcuna operazione non semplice.
is_nothrow_constructible Verifica se il tipo è costruibile ed è noto come tipo che non genera eccezioni quando viene costruito mediante i tipi specificati.
is_nothrow_default_constructible Verifica se il tipo è costruibile per impostazione predefinita ed è noto come tipo che non genera eccezioni quando viene costruito per impostazione predefinita.
is_nothrow_copy_constructible Verifica se il tipo è costruibile mediante copia e se il costruttore di copia è noto come elemento che non genera eccezioni.
is_nothrow_move_constructible Verifica se il tipo è costruibile mediante spostamento e se il costruttore di spostamento è noto come elemento che non genera eccezioni.
is_nothrow_assignable Verifica se il tipo è assegnabile mediante il tipo specificato e se l'assegnazione è nota come operazione che non genera eccezioni.
is_nothrow_copy_assignable Verifica se il tipo è assegnabile mediante copia e se l'assegnazione è nota come operazione che non genera eccezioni.
is_nothrow_move_assignable Verifica se il tipo è assegnabile mediante spostamento e se l'assegnazione è nota come operazione che non genera eccezioni.
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible Verifica se il tipo è distruttibile e se il distruttore è noto come elemento che non genera eccezioni.
has_virtual_destructor Verifica se il tipo ha un distruttore virtuale.
has_unique_object_representations
is_invocable Verifica se è possibile richiamare un tipo chiamabile usando i tipi di argomento specificati.
Aggiunta in C++17.
is_invocable_r Verifica se un tipo chiamabile può essere richiamato utilizzando i tipi di argomento specificati e il risultato è convertibile nel tipo specificato.
Aggiunta in C++17.
is_nothrow_invocable Verifica se un tipo chiamabile può essere richiamato utilizzando i tipi di argomento specificati e non genera eccezioni.
Aggiunta in C++17.
is_nothrow_invocable_r Verifica se un tipo chiamabile può essere richiamato utilizzando i tipi di argomento specificati e non genera eccezioni e il risultato è convertibile nel tipo specificato.
Aggiunta in C++17.

Query sulle proprietà del tipo

Nome Descrizione
alignment_of Ottiene l'allineamento di un tipo.
rank Ottiene il numero di dimensioni della matrice.
extent Ottiene il numero di elementi nella dimensione di matrice specificata.

Relazioni tra i tipi

Nome Descrizione
is_same Verifica se due tipi sono uguali.
is_base_of Verifica se un tipo è una base di un altro tipo.
is_convertible Verifica se il tipo è convertibile in un altro tipo.

Modifiche costante-volatile

Nome Descrizione
add_const Genera un tipo const dal tipo.
add_volatile Genera un tipo volatile dal tipo.
add_cv Genera un tipo const volatile dal tipo.
remove_const Genera un tipo non costante dal tipo.
remove_volatile Genera un tipo non volatile dal tipo.
remove_cv Genera un tipo non costante non volatile dal tipo.

Modifiche dei riferimenti

Nome Descrizione
add_lvalue_reference Genera un riferimento al tipo dal tipo.
add_rvalue_reference Genera un riferimento rvalue al tipo dal tipo.
remove_reference Genera un tipo di non riferimento dal tipo.

Modifiche della firma

Nome Descrizione
make_signed Genera il tipo se con segno, ovvero il più piccolo tipo con segno di dimensioni maggiori o uguali al tipo.
make_unsigned Genera il tipo se senza segno, ovvero il più piccolo tipo senza segno di dimensioni maggiori o uguali al tipo.

Modifiche delle matrici

Nome Descrizione
remove_all_extents Genera un tipo non matrice da un tipo matrice.
remove_extent Genera il tipo di elemento da un tipo matrice.

Modifiche dei puntatori

Nome Descrizione
add_pointer Genera un puntatore al tipo dal tipo.
remove_pointer Genera un tipo da un puntatore al tipo.

Altre trasformazioni

Nome Descrizione
aligned_storage Alloca memoria non inizializzata per un tipo allineato.
aligned_union Alloca memoria non inizializzata per un'unione allineata con un costruttore o un distruttore non semplice.
common_type Genera il tipo comune di tutti i tipi di pacchetto di parametri.
conditional Se la condizione è true, genera il primo tipo specificato, altrimenti genera il secondo.
decay Genera il tipo come passato da valore. Crea un tipo di non riferimento, non constante o non volatile oppure crea un puntatore al tipo.
enable_if Se la condizione è true, genera il primo tipo specificato, altrimenti non genera alcun tipo.
invoke_result Determina il tipo restituito del tipo chiamabile che accetta i tipi di argomento specificati.
Aggiunta in C++17.
result_of Determina il tipo restituito del tipo chiamabile che accetta i tipi di argomento specificati.
Aggiunta in C++14, deprecata in C++17.
underlying_type Genera il tipo integrale sottostante per un tipo di enumerazione.

Tratti dell'operatore logico

Nome Descrizione
congiunzione
disgiunzione
negazione

Vedi anche

<functional>