<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 void
nebo 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 void
nebo 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í.