<type_traits>

Define modelos para constantes de tempo de compilação e informações sobre as propriedades dos argumentos de tipo ou produzem tipos transformados.

Sintaxe

#include <type_traits>

Comentários

As classes e os modelos em <type_traits> são usados para dar suporte a inferência, classificação e transformação de tipos em tempo de compilação. Eles também são usados para detectar erros relacionados ao tipo e para ajudar você a otimizar seu código genérico. Características de tipo unário descrevem uma propriedade de um tipo, características de tipo binário descrevem uma relação entre tipos e características de transformação modificam uma propriedade de um tipo.

A classe de ajuda integral_constant e as respectivas especializações de modelo true_type e false_type formam as classes de base para predicados de tipo. Um predicado de tipo é um modelo que usa um ou mais argumentos de tipo. Quando um predicado de tipo mantém-se verdadeiro, ele é derivado publicamente, direta ou indiretamente, de true_type. Quando um predicado de tipo mantém-se falso, ele é derivado publicamente, direta ou indiretamente, de false_type.

Um modificador de tipo ou uma característica da transformação é um modelo que usa um ou mais argumentos de modelo e tem um membro, type, que é sinônimo do tipo modificado.

Modelos de alias

Para simplificar expressões de características de tipo, são fornecidos modelos de alias para typename some_trait<T>::type, em que some_trait é o nome de classe do modelo. Por exemplo, add_const tem o modelo de alias para seu tipo add_const_t, definido como:

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

Estes são os aliases fornecidos para os membros type:

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

Classe auxiliar e typedefs

Nome Descrição
integral_constant Cria uma constante integral de um tipo e valor.
true_type Mantém uma constante integral com valor verdadeiro.
false_type Mantém uma constante integral com valor falso.

Categorias de tipo principal

Nome Descrição
is_void Testa se o tipo é void.
is_null_pointer Testa se o tipo é std::nullptr_t.
is_integral Testa se o tipo é integral.
is_floating_point Testa se o tipo é um ponto flutuante.
is_array Testa se o tipo é uma matriz.
is_pointer Testa se o tipo é um ponteiro.
is_lvalue_reference Testa se o tipo é uma referência lvalue.
is_rvalue_reference Testa se o tipo é uma referência rvalue.
is_member_object_pointer Testa se o tipo é um ponteiro para um objeto do membro.
is_member_function_pointer Testa se o tipo é um ponteiro para uma função do membro.
is_enum Testa se o tipo é uma enumeração.
is_union Testa se o tipo é uma união.
is_class Testa se o tipo é uma classe.
is_function Testa se o tipo é um tipo de função.

Categorias de tipo de composição

Nome Descrição
is_reference Testa se o tipo é uma referência.
is_arithmetic Testa se o tipo é aritmético.
is_fundamental Testa se o tipo é void ou aritmético.
is_object Testa se o tipo é um tipo de objeto.
is_scalar Testa se o tipo é escalar.
is_compound Testa se o tipo não é escalar.
is_member_pointer Testa se o tipo é um ponteiro para um membro.

Propriedades de tipo

Nome Descrição
is_const Testa se o tipo é const.
is_volatile Testa se o tipo é volatile.
is_trivial Testa se o tipo é trivial.
is_trivially_copyable Testa se o tipo é trivialmente copiável.
is_standard_layout Testa se o tipo é um layout padrão.
is_pod Testa se o tipo é um POD.
is_literal_type Testa se o tipo pode ser uma variável constexpr ou usado em uma função constexpr.
is_empty Testa se o tipo é uma classe vazia.
is_polymorphic Testa se o tipo é uma classe polimórfica.
is_abstract Testa se o tipo é uma classe abstrata.
is_final Testa se o tipo é um tipo de classe marcado como final.
is_aggregate
is_signed Testa se o tipo é um inteiro com sinal.
is_unsigned Testa se o tipo é um inteiro sem sinal.
is_constructible Testa se o tipo é construível usando os tipos de argumento especificados.
is_default_constructible Testa se o tipo tem um construtor padrão.
is_copy_constructible Testa se o tipo tem um construtor de cópia.
is_move_constructible Testa se o tipo tem um construtor de movimentação.
is_assignable Testa se ao primeiro tipo pode ser atribuído um valor do segundo tipo.
is_copy_assignable Testa se a um tipo pode ser atribuído um valor de referência constante do tipo.
is_move_assignable Testa se a um tipo pode ser atribuída uma referência rvalue do tipo.
is_swappable
is_swappable_with
is_destructible Testa se o tipo é destrutível.
is_trivially_constructible Testa se o tipo usa operações não triviais ao ser construído com o uso de tipos especificados.
is_trivially_default_constructible Testa se o tipo usa operações não triviais quando construído por padrão.
is_trivially_copy_constructible Testa se o tipo usa operações não triviais quando construído por cópia.
is_trivially_move_constructible Testa se o tipo usa operações não triviais quando construído por movimentação.
is_trivially_assignable Testa se os tipos são atribuíveis e se a atribuição usa operações não triviais.
is_trivially_copy_assignable Testa se o tipo é atribuível a cópia e se a atribuição usa operações não triviais.
is_trivially_move_assignable Testa se o tipo é atribuível a movimentação e se a atribuição usa operações não triviais.
is_trivially_destructible Testa se o tipo é destrutível e se o destruidor usa operações não triviais.
is_nothrow_constructible Testa se o tipo é construível e se não efetua lançamentos quando construído usando os tipos especificados.
is_nothrow_default_constructible Testa se o tipo é construível por padrão e se não efetua lançamentos quando construído por padrão.
is_nothrow_copy_constructible Testa se o tipo é construível por cópia e se o construtor de cópia não efetua lançamentos.
is_nothrow_move_constructible Testa se o tipo é construível por movimentação e se o construtor de movimentação não efetua lançamentos.
is_nothrow_assignable Testa se o tipo é atribuível usando o tipo especificado e a atribuição não efetua lançamentos.
is_nothrow_copy_assignable Testa se o tipo é atribuível usando a cópia e a atribuição não efetua lançamentos.
is_nothrow_move_assignable Testa se o tipo é atribuível por movimentação e se a atribuição não efetua lançamentos.
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible Testa se o tipo é destrutível e se o destruidor não efetua lançamentos.
has_virtual_destructor Testa se o tipo tem um destruidor virtual.
has_unique_object_representations
is_invocable Testa se um tipo callable pode ser invocado usando os tipos de argumento especificados.
Adicionado em C++17.
is_invocable_r Testa se um tipo callable pode ser invocado usando os tipos de argumento especificados e se o resultado é conversível para o tipo especificado.
Adicionado em C++17.
is_nothrow_invocable Testa se um tipo callable pode ser invocado usando os tipos de argumento especificados e é conhecido por não gerar exceções.
Adicionado em C++17.
is_nothrow_invocable_r Testa se um tipo callable pode ser invocado usando os tipos de argumento especificados, se é conhecido por não gerar exceções e se o resultado é conversível para o tipo especificado.
Adicionado em C++17.

Consultas de tipo de propriedade

Nome Descrição
alignment_of Obtém o alinhamento de um tipo.
rank Obtém o número de dimensões da matriz.
extent Obtém o número de elementos na dimensão de matriz especificada.

Relações de tipo

Nome Descrição
is_same Testa se dois tipos são iguais.
is_base_of Testa se um tipo é a base de outro.
is_convertible Testa se o tipo pode ser convertido em outro.

Modificações constantes voláteis

Nome Descrição
add_const Produz um tipo const de tipo.
add_volatile Produz um tipo volatile de tipo.
add_cv Produz um tipo const volatile de tipo.
remove_const Produz um tipo não constante de tipo.
remove_volatile Produz um tipo não volátil de tipo.
remove_cv Produz um tipo não constante e não volátil de tipo.

Modificações de referência

Nome Descrição
add_lvalue_reference Produz uma referência para o tipo do tipo.
add_rvalue_reference Produz uma referência rvalue para o tipo do tipo
remove_reference Produz um tipo de não referência do tipo.

Assinar modificações

Nome Descrição
make_signed Produz o tipo, se assinado ou o menor tipo assinado, maior ou igual em tamanho ao tipo.
make_unsigned Produz o tipo, se não assinado ou o menor tipo não assinado, maior ou igual em tamanho ao tipo.

Modificações de matriz

Nome Descrição
remove_all_extents Cria o tipo de não matriz de um tipo de matriz.
remove_extent Produz o tipo de elemento de um tipo de matriz.

Modificações de ponteiro

Nome Descrição
add_pointer Produz um ponteiro para o tipo do tipo.
remove_pointer Produz um tipo de um ponteiro para tipo.

Outras transformações

Nome Descrição
aligned_storage Aloca memória não inicializada para um tipo alinhado.
aligned_union Aloca memória não inicializada para uma união alinhada com um construtor ou destruidor não trivial.
common_type Produz o tipo comum de todos os tipos de pacote de parâmetros.
conditional Se a condição for verdadeira, produzirá o primeiro tipo especificado, caso contrário, o segundo tipo especificado.
decay Produz o tipo passado por valor. Cria o tipo de não referência, não constante, não volátil ou cria um ponteiro para o tipo.
enable_if Se a condição for verdadeira, produzirá o tipo especificado, caso contrário, nenhum tipo.
invoke_result Determina o tipo de retorno do tipo callable que usa os tipos de argumento especificados.
Adicionado em C++17.
result_of Determina o tipo de retorno do tipo callable que usa os tipos de argumento especificados.
Adicionado em C++14, preterido em C++17.
underlying_type Produz o tipo integral subjacente para um tipo de enumeração.

Características do operador lógico

Nome Descrição
conjunção
disjunção
negação

Confira também

<functional>