template <class T>
struct has_trivial_move_constructor : public true_type-or-false_type
{};
Наследники: Если T является (возможно, cv-квалифицированным) типом с тривиальным конструктором движений, то наследуется от true_type, в противном случае наследуется от false_type.
Если тип имеет тривиальный конструктор движения, то конструктор имеет тот же эффект, что и копирование битов одного объекта на другой: вызовы конструктору можно безопасно заменить вызовом memcpy
.
Совместимость с компилятором: Без некоторой (пока еще неуказанной) помощи от компилятора конструктор никогда не сообщит, что класс или структура, определяемые пользователем, имеют тривиальный конструктор; это всегда безопасно, если возможно, неоптимально. Кроме того, C++11 decltype
необходим для правильной поддержки удаленных или частных конструкторов перемещения. В настоящее время (июнь 2015 года) компиляторы, которые имеют необходимые intinsics для обеспечения того, чтобы эта черта «просто работала», включают Clang, GCC-5.1 и MSVC-12.0. Вы также можете проверить, доступны ли необходимые внутренности , проверив, доступен ли макрос. BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR
.
Руководитель: has_trivial_move_constructor.hpp> и <type_traitshpp
Примеры:
has_trivial_move_constructor<int>
наследует от true_type
.
has_trivial_move_constructor<char*>::type
является типом true_type
.
has_trivial_move_constructor<int (*)(long)>::значение
является интегральным постоянным выражением, которое оценивает до true.
has_trivial_move_constructor<MyClass>::значение
является интегральным постоянным выражением, которое оценивает до ложно.
has_trivial_move_constructor<T>::value_type
является типом bool
.