Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 |