template <class T>
struct has_trivial_destructor : public true_type-or-false_type
{};
Наследники: Если T является (возможно, cv-квалифицированным) типом с тривиальным деструктором, то наследуется от true_type, в противном случае наследуется от false_type.
Если тип имеет тривиальный деструктор, то деструктор не имеет эффекта: вызовы деструктору можно безопасно опустить. Обратите внимание, что использование метапрограммирования для пропуска вызова к одному тривиальному вызову не приносит никакой пользы. Однако, если циклы и/или код обработки исключений также могут быть опущены, то можно получить некоторое преимущество с точки зрения размера и скорости кода.
Совместимость с компилятором: Без некоторой (пока еще неуказанной) помощи компилятора, хэш-тривиал_деструктор никогда не сообщит, что класс или структура, определяемая пользователем, имеет тривиальный деструктор; это всегда безопасно, если возможно, неоптимально. Кроме того, для правильной работы с удаленными или частными деструкторами требуется поддержка C++11 decltype
. В настоящее время (июнь 2015 года) компиляторы более свежие, чем Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0 и Codegear, имеют необходимый компилятор intrinsics для обеспечения того, чтобы эта черта «просто работала». Вы также можете проверить, доступны ли необходимые внутренности , проверив, доступен ли макрос. BOOST_HAS_TRIVIAL_DESTRUCTOR
.
С++ Стандартная ссылка: 12.4p3.
Руководитель: /has_trivial_destructor.hpp>
или type_traitshpp>
Примеры:
has_trivial_destructor<int>
наследует от true_type
.
has_trivial_destructor<char*>::type
является типом true_type
.
has_trivial_destructor<int (*)(long)>::value
является интегральным постоянным выражением, которое оценивает до true.
has_trivial_destructor<MyClass>::значение
является интегральным постоянным выражением, которое оценивает до ложно.
has_trivial_destructor<T>::value_type
является типом bool
.