Partilhar via


<type_traits> funções

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

Ver também

<type_traits>