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.
O <type_traits> cabeçalho fornece as seguintes funções:
is_assignable
Testa se um valor do tipo From pode ser atribuído a um tipo Para .
template <class To, class From>
struct is_assignable;
Parâmetros
Para
O tipo do objeto que recebe a atribuição.
De
O tipo do objeto que fornece o valor.
Observações
A expressão declval<To>() = declval<From>() não avaliada deve estar bem formada.
De e Para devem ser tipos completos, voidou matrizes de ligação desconhecida.
is_copy_assignable
Testa se o tipo tem pode ser copiado na atribuição.
template <class Ty>
struct is_copy_assignable;
Parâmetros
Ty
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo Ty é uma classe que tem um operador de atribuição de cópia, caso contrário, mantém false. Equivalente a is_assignable<Ty&, const Ty&>.
é_copiavelmente_construível
Testa se type tem um construtor copy.
template <class Ty>
struct is_copy_constructible;
Parâmetros
Ty
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo Ty é uma classe que tem um construtor copy, caso contrário, ele mantém false.
Exemplo
#include <type_traits>
#include <iostream>
struct Copyable
{
int val;
};
struct NotCopyable
{
NotCopyable(const NotCopyable&) = delete;
int val;
};
int main()
{
std::cout << "is_copy_constructible<Copyable> == " << std::boolalpha
<< std::is_copy_constructible<Copyable>::value << std::endl;
std::cout << "is_copy_constructible<NotCopyable> == " << std::boolalpha
<< std::is_copy_constructible<NotCopyable>::value << std::endl;
return (0);
}
is_copy_constructible<Copyable> == true
is_copy_constructible<NotCopyable > == false
é_construível_por_defeito
Testa se um tipo tem um construtor padrão.
template <class Ty>
struct is_default_constructible;
Parâmetros
T
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo T é um tipo de classe que tem um construtor padrão, caso contrário, ele mantém false. Isto é equivalente ao predicado is_constructible<T>. O tipo T deve ser um tipo voidcompleto ou uma matriz de ligação desconhecida.
Exemplo
#include <type_traits>
#include <iostream>
struct Simple
{
Simple() : val(0) {}
int val;
};
struct Simple2
{
Simple2(int v) : val(v) {}
int val;
};
int main()
{
std::cout << "is_default_constructible<Simple> == " << std::boolalpha
<< std::is_default_constructible<Simple>::value << std::endl;
std::cout << "is_default_constructible<Simple2> == " << std::boolalpha
<< std::is_default_constructible<Simple2>::value << std::endl;
return (0);
}
is_default_constructible<Simple> == true
is_default_constructible<Simple2> == false
is_move_assignable
Testa se o tipo pode ser movido atribuído.
template <class T>
struct is_move_assignable;
Parâmetros
T
O tipo a ser consultado.
Observações
Um tipo é move assignable se uma referência de rvalue ao tipo puder ser atribuída a uma referência ao tipo. O predicado do tipo é equivalente a is_assignable<T&, T&&>. Os tipos atribuíveis de movimentação incluem tipos escalares referenciados e tipos de classe que têm operadores de atribuição de movimentação gerados pelo compilador ou definidos pelo usuário.
é_móvel_construível
Testa se o tipo tem um construtor move.
template <class T>
struct is_move_constructible;
Parâmetros
T
O tipo a ser avaliado
Observações
Um predicado de tipo que avalia como true se o tipo T pode ser construído usando uma operação move. Este predicado é equivalente a is_constructible<T, T&&>.
is_nothrow_move_assignable (verifica se um tipo possui um operador de atribuição de movimento trivial que não lança exceções)
Testa se o tipo tem um nothrow operador de atribuição de movimento.
template <class Ty>
struct is_nothrow_move_assignable;
Parâmetros
Ty
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo Ty tem um operador de atribuição de movimentação de nothro, caso contrário, ele mantém false.
is_nothrow_swappable
template <class T> struct is_nothrow_swappable;
is_nothrow_swappable_with
template <class T, class U> struct is_nothrow_swappable_with;
is_swappable
template <class T> struct is_swappable;
is_swappable_with
template <class T, class U> struct is_swappable_with;
é trivialmente atribuível por cópia
Testa se o tipo tem um operador de atribuição de cópia trivial.
template <class Ty>
struct is_trivially_copy_assignable;
Parâmetros
T
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo T é uma classe que tem um operador de atribuição de cópia trivial, caso contrário, mantém false.
Um construtor de atribuição para uma classe T é trivial se for fornecido implicitamente, a classe T não tem funções virtuais, a classe T não tem bases virtuais, as classes de todos os membros de dados não estáticos do tipo de classe têm operadores de atribuição triviais e as classes de todos os membros de dados não estáticos da matriz de tipo de classe têm operadores de atribuição triviais.
is_trivially_move_assignable
Testa se o tipo tem um operador de atribuição de movimentação trivial.
template <class Ty>
struct is_trivially_move_assignable;
Parâmetros
Ty
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo Ty é uma classe que tem um operador de atribuição de movimento trivial, caso contrário, mantém false.
Um operador de atribuição de movimento para uma classe Ty é trivial se:
é implicitamente fornecido
a classe Ty não tem funções virtuais
a classe Ty não tem bases virtuais
As classes de todos os dados não estáticos membros do tipo de classe têm operadores de atribuição de movimentação triviais
As classes de todos os membros de dados não estáticos do tipo Array of Class têm operadores de atribuição de movimentação triviais
é_trivialmente_construível_com_movimento
Testa se type tem construtor de movimento trivial.
template <class Ty>
struct is_trivially_move_constructible;
Parâmetros
Ty
O tipo a ser consultado.
Observações
Uma instância do predicado de tipo mantém true se o tipo Ty é uma classe que tem um construtor de movimento trivial, caso contrário, mantém false.
Um construtor move para uma classe Ty é trivial se:
é implicitamente declarado
seus tipos de parâmetros são equivalentes aos de uma declaração implícita
a classe Ty não tem funções virtuais
a classe Ty não tem bases virtuais
a classe não tem membros de dados não estáticos voláteis
todas as bases diretas da classe Ty têm construtores de movimento triviais
As classes de todos os membros de dados não estáticos do tipo de classe têm construtores de movimento triviais
As classes de todos os membros de dados não-estáticos do tipo Array of Class têm construtores de movimento triviais