Поделиться через


<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 имеют тривиальные конструкторы перемещения

классы всех нестатических элементов данных типа класса имеют тривиальные конструкторы перемещения;

классы всех нестатических элементов данных массива типов класса имеют тривиальные конструкторы перемещения.

См. также

<type_traits>