Sdílet prostřednictvím


<type_traits> – funkce

is_assignable
is_copy_assignable
is_copy_constructible
is_default_constructible
is_move_assignable
is_move_constructible
is_nothrow_move_assignable
is_nothrow_swappable
is_nothrow_swappable_with
is_swappable
is_swappable_with
is_trivially_copy_assignable
is_trivially_move_assignable
is_trivially_move_constructible

is_assignable

Testuje, zda je možné přiřadit hodnotu typu From k typu To .

template <class To, class From>
struct is_assignable;

Parametry

Na
Typ objektu, který obdrží přiřazení.

Od
Typ objektu, který poskytuje hodnotu.

Poznámky

Nehodnocený výraz declval<To>() = declval<From>() musí být správně vytvořený. Od i Do musí být úplné typy voidnebo pole neznámých hranic.

is_copy_assignable

Testuje, zda je možné typ zkopírovat při přiřazení.

template <class Ty>
struct is_copy_assignable;

Parametry

Ty
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu obsahuje hodnotu true, pokud typ Ty je třída, která má operátor přiřazení kopírování, jinak obsahuje hodnotu false. Ekvivalentní is_assignable<Ty& const Ty&>.

is_copy_constructible

Testuje, zda typ má konstruktor kopírování.

template <class Ty>
struct is_copy_constructible;

Parametry

Ty
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu má hodnotu true, pokud typ Ty je třída, která má konstruktor kopírování, jinak obsahuje hodnotu false.

Příklad

#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

is_default_constructible

Testuje, zda typ má výchozí konstruktor.

template <class Ty>
struct is_default_constructible;

Parametry

T
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu obsahuje hodnotu true, pokud typ T je typ třídy , který má výchozí konstruktor, jinak obsahuje hodnotu false. To je ekvivalentem predikátu is_constructible<T>. Typ T musí být úplný typ voidnebo pole neznámé vazby.

Příklad

#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

Testuje, jestli je možné typ přesunout.

template <class T>
struct is_move_assignable;

Parametry

T
Typ, na který chcete odeslat dotaz.

Poznámky

Typ je možné přiřadit, pokud lze k odkazu na typ přiřadit odkaz rvalue. Predikát typu je ekvivalentní is_assignable<T&, T&&>. K přiřaditelným typům přesunu patří odkazovatelné skalární typy a typy tříd, které mají operátory přiřazení přesunutí generované kompilátorem nebo uživatelem definované.

is_move_constructible

Testuje, zda typ má konstruktor přesunutí.

template <class T>
struct is_move_constructible;

Parametry

T
Typ, který se má vyhodnotit

Poznámky

Predikát typu, který se vyhodnotí jako true, pokud typ T lze vytvořit pomocí operace přesunutí. Tento predikát je ekvivalentní is_constructible<T, T&&>.

is_nothrow_move_assignable

Testuje, zda typ má nothrow operátor přiřazení přesunutí.

template <class Ty>
struct is_nothrow_move_assignable;

Parametry

Ty
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu obsahuje hodnotu true, pokud typ Ty má operátor přiřazení přesunutí nothrow, jinak obsahuje hodnotu 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;

is_trivially_copy_assignable

Testuje, zda typ má triviální operátor přiřazení kopírování.

template <class Ty>
struct is_trivially_copy_assignable;

Parametry

T
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu má hodnotu true, pokud typ T je třída, která má triviální operátor přiřazení kopírování, jinak obsahuje hodnotu false.

Konstruktor přiřazení třídy T je triviální, pokud je implicitně zadán, třída T nemá žádné virtuální funkce, třída T nemá žádné virtuální základny, třídy všech nestatických datových členů typu třídy mají triviální operátory přiřazení a třídy všech nestatických datových členů pole třídy mají triviální operátory přiřazení.

is_trivially_move_assignable

Testuje, zda typ má triviální operátor přiřazení přesunutí.

template <class Ty>
struct is_trivially_move_assignable;

Parametry

Ty
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu má hodnotu true, pokud typ Ty je třída, která má triviální operátor přiřazení přesunutí, jinak obsahuje hodnotu false.

Operátor přiřazení přesunutí pro třídu Ty je triviální, pokud:

je implicitně poskytována.

třída Ty nemá žádné virtuální funkce

třída Ty nemá žádné virtuální základny

třídy všech nestatické datové členy typu třídy mají triviální operátory přiřazení přesunutí.

třídy všech nestatické datové členy typu pole třídy mají triviální operátory přiřazení přesunutí.

is_trivially_move_constructible

Testuje, zda typ obsahuje triviální konstruktor přesunutí.

template <class Ty>
struct is_trivially_move_constructible;

Parametry

Ty
Typ, na který chcete odeslat dotaz.

Poznámky

Instance predikátu typu má hodnotu true, pokud typ Ty je třída, která má triviální konstruktor přesunutí, jinak obsahuje hodnotu false.

Konstruktor přesunutí třídy Ty je triviální, pokud:

je implicitně deklarován.

jeho typy parametrů jsou ekvivalentní typům implicitní deklarace.

třída Ty nemá žádné virtuální funkce

třída Ty nemá žádné virtuální základny

třída nemá nestálé nestatické datové členy.

všechny přímé základny třídy Ty mají triviální konstruktory přesunutí

třídy všech nestatické datové členy typu třídy mají triviální konstruktory přesunutí.

třídy všech nestatické datové členy typu pole třídy mají triviální konstruktory přesunutí.

Viz také

<type_traits>