<type_traits>
Функции
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
Проверяет, можно ли назначить значение типа From типу To .
template <class To, class From>
struct is_assignable;
Параметры
Кому
Тип объекта, который получает назначение.
From
Тип объекта, который предоставляет значение.
Замечания
Невычисленное выражение declval<To>() = declval<From>()
должно иметь правильный формат. Оба типа from и To должны быть полными типами или void
массивами неизвестной границы.
is_copy_assignable
Проверяет, может ли тип быть скопирован при присвоении значения.
template <class Ty>
struct is_copy_assignable;
Параметры
Ty
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип Ty является классом, который имеет оператор назначения копирования, в противном случае он содержит значение false. Эквивалентно is_assignable<Ty&, const Ty>>.
is_copy_constructible
Проверяет, есть ли у типа конструктор копии.
template <class Ty>
struct is_copy_constructible;
Параметры
Ty
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип Ty — это класс, имеющий конструктор копирования, в противном случае он содержит значение false.
Пример
#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
Проверяет, есть ли у типа конструктор по умолчанию.
template <class Ty>
struct is_default_constructible;
Параметры
T
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип T является типом класса, который имеет конструктор по умолчанию, в противном случае он содержит значение false. Это эквивалентно предикату is_constructible<T>
. Тип T должен быть полным типом void
или массивом неизвестной границы.
Пример
#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
Проверяет, является ли тип присваиваемым при перемещении.
template <class T>
struct is_move_assignable;
Параметры
T
Запрашиваемый тип.
Замечания
Тип является тип присваиваемым при перемещении, если ссылку rvalue на тип можно присвоить ссылке на тип. Предикат типа эквивалентен is_assignable<T&, T&&>
. Перемещаемые при присваивании типы включают ссылочные скалярные типы и типы классов, в которых есть созданные компилятором или определяемые пользователем операторы присваивания.
is_move_constructible
Проверяет, имеет ли тип конструктор перемещения.
template <class T>
struct is_move_constructible;
Параметры
T
Вычисляемый тип.
Замечания
Предикат типа, который оценивает значение true, если тип T можно создать с помощью операции перемещения. Этот предикат эквивалентен is_constructible<T, T&&>
.
is_nothrow_move_assignable
Проверяет, имеет nothrow
ли тип оператор назначения перемещения.
template <class Ty>
struct is_nothrow_move_assignable;
Параметры
Ty
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип Ty имеет оператор назначения перемещения nothrow, в противном случае он содержит значение 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
Проверяет, есть ли у типа тривиальный оператор присваивания копии.
template <class Ty>
struct is_trivially_copy_assignable;
Параметры
T
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип T является классом, который имеет тривиальный оператор назначения копирования, в противном случае он содержит значение false.
Конструктор назначения для класса T является тривиальным, если он неявно предоставлен, класс T не имеет виртуальных функций, класс T не имеет виртуальных баз, классы всех нестатических элементов данных типа имеют тривиальные операторы присваивания, а классы всех нестатических элементов данных массива типов класса имеют тривиальные операторы назначения.
is_trivially_move_assignable
Проверяет, есть ли у типа тривиальный оператор присваивания перемещением.
template <class Ty>
struct is_trivially_move_assignable;
Параметры
Ty
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип Ty является классом, который имеет тривиальный оператор назначения перемещения, в противном случае он содержит значение false.
Оператор назначения перемещения для класса Ty является тривиальным, если:
он неявно предоставляется;
Класс Ty не имеет виртуальных функций
Класс Ty не имеет виртуальных баз
классы всех нестатических элементов данных типа класса имеют тривиальные операторы присваивания перемещением;
классы всех нестатических элементов данных массива типов класса имеют тривиальные операторы присваивания перемещением.
is_trivially_move_constructible
Проверяет, есть ли у типа тривиальный конструктор перемещения.
template <class Ty>
struct is_trivially_move_constructible;
Параметры
Ty
Запрашиваемый тип.
Замечания
Экземпляр предиката типа имеет значение true, если тип Ty — это класс с тривиальным конструктором перемещения, в противном случае он содержит значение false.
Конструктор перемещения для класса Ty является тривиальным, если:
он неявно объявлен;
его типы параметров эквивалентны типам неявного объявления;
Класс Ty не имеет виртуальных функций
Класс Ty не имеет виртуальных баз
класс не содержит изменчивых нестатических элементов данных;
Все прямые основы класса Ty имеют тривиальные конструкторы перемещения
классы всех нестатических элементов данных типа класса имеют тривиальные конструкторы перемещения;
классы всех нестатических элементов данных массива типов класса имеют тривиальные конструкторы перемещения.