<type_traits>
, funkcje
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
Sprawdza, czy wartość typu From może być przypisana do typu Do .
template <class To, class From>
struct is_assignable;
Parametry
Do
Typ obiektu, który odbiera przypisanie.
Od
Typ obiektu, który udostępnia wartość.
Uwagi
Nieszacowane wyrażenie declval<To>() = declval<From>()
musi być poprawnie sformułowane. Zarówno od , jak i do muszą być kompletnymi typami, void
lub tablicami nieznanej granicy.
is_copy_assignable
Sprawdza, czy typ można skopiować przy przypisaniu.
template <class Ty>
struct is_copy_assignable;
Parametry
Ty
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma operator przypisania kopiowania, w przeciwnym razie przechowuje wartość false. Odpowiednik is_assignable<Ty&, const Ty&>.
is_copy_constructible
Sprawdza, czy typ ma konstruktor kopiujący.
template <class Ty>
struct is_copy_constructible;
Parametry
Ty
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma konstruktor kopiujący, w przeciwnym razie przechowuje wartość false.
Przykład
#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
Sprawdza, czy typ ma konstruktor domyślny.
template <class Ty>
struct is_default_constructible;
Parametry
T
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ T jest typem klasy, który ma konstruktor domyślny, w przeciwnym razie przechowuje wartość false. Jest to odpowiednik predykatu is_constructible<T>
. Typ T musi być kompletnym typem, void
lub tablicą nieznanej granicy.
Przykład
#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
Sprawdza, czy typ można przenieść.
template <class T>
struct is_move_assignable;
Parametry
T
Typ do zapytania.
Uwagi
Typ jest przypisywany, jeśli odwołanie rvalue do typu można przypisać do odwołania do typu. Predykat typu jest odpowiednikiem is_assignable<T&, T&&>
. Typy przypisywane do przenoszenia obejmują przywoływalne typy skalarne i typy klas, które mają operatory przypisania przenoszenia generowane przez kompilator lub zdefiniowane przez użytkownika.
is_move_constructible
Sprawdza, czy typ ma konstruktor przenoszenia.
template <class T>
struct is_move_constructible;
Parametry
T
Typ, który ma zostać oceniony
Uwagi
Predykat typu, który daje wartość true, jeśli typ T można skonstruować przy użyciu operacji przenoszenia. Ten predykat jest odpowiednikiem is_constructible<T, T&&>
.
is_nothrow_move_assignable
Sprawdza, czy typ ma nothrow
operator przypisania przenoszenia.
template <class Ty>
struct is_nothrow_move_assignable;
Parametry
Ty
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ Ty ma operator przypisania przenoszenia nothrow, w przeciwnym razie zawiera wartość 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
Sprawdza, czy typ ma trywialny operator przypisania kopiowania.
template <class Ty>
struct is_trivially_copy_assignable;
Parametry
T
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ T jest klasą, która ma trywialny operator przypisania kopiowania, w przeciwnym razie przechowuje wartość false.
Konstruktor przypisania dla klasy T jest trywialny, jeśli jest niejawnie podany, klasa T nie ma żadnych funkcji wirtualnych, klasa T nie ma wirtualnych baz, klasy wszystkich niestatyczne składowe danych typu klasy mają trywialne operatory przypisania, a klasy wszystkich niestacjonalnych składowych danych tablicy typów klasy mają trywialne operatory przypisania.
is_trivially_move_assignable
Sprawdza, czy typ ma trywialny operator przypisania przenoszenia.
template <class Ty>
struct is_trivially_move_assignable;
Parametry
Ty
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma trywialny operator przypisania przenoszenia, w przeciwnym razie zawiera wartość false.
Operator przypisania przenoszenia dla klasy Ty jest trywialny, jeśli:
jest ona dostarczana niejawnie
klasa Ty nie ma funkcji wirtualnych
klasa Ty nie ma wirtualnych baz
klasy wszystkich niestacjonalnych składowych danych typu klasy mają trywialne operatory przypisania przenoszenia
klasy wszystkich niestacjonalnych składowych danych tablicy typów klasy mają proste operatory przypisania przenoszenia
is_trivially_move_constructible
Sprawdza, czy typ ma trywialny konstruktor przenoszenia.
template <class Ty>
struct is_trivially_move_constructible;
Parametry
Ty
Typ do zapytania.
Uwagi
Wystąpienie predykatu typu ma wartość true, jeśli typ Ty jest klasą, która ma trywialny konstruktor przenoszenia, w przeciwnym razie zawiera wartość false.
Konstruktor przenoszenia dla klasy Ty jest trywialny, jeśli:
jest niejawnie zadeklarowany
jego typy parametrów są równoważne typom niejawnej deklaracji
klasa Ty nie ma funkcji wirtualnych
klasa Ty nie ma wirtualnych baz
klasa nie ma nietrwałych składowych danych niestacjonanych
wszystkie bezpośrednie podstawy klasy Ty mają trywialne konstruktory przenoszenia
klasy wszystkich niestacjonalnych składowych danych typu klasy mają proste konstruktory przenoszenia
klasy wszystkich niestacjonalnych składowych danych tablicy typów klasy mają proste konstruktory przenoszenia