<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 |