template <class T>
struct is_union : public true_type-or-false_type
{};
Наследства: Если T является (возможно, cv-квалифицированным) типом союза, то наследуется от true_type, в противном случае наследуется от false_type. В настоящее время требуется некая поддержка компилятора, иначе союзы идентифицируются как классы.
С++ Стандартная ссылка: 3.9.2 и 9.5.
Совместимость с компилятором: Без помощи компилятора (некоторые пока не указаны) мы не можем отличить типы союза и класса, используя только стандартный C++, в результате этот тип никогда не унаследует от true_type, если пользователь явно не специализируется на шаблоне для своих определяемых пользователем типов союза, или если компилятор не предоставляет неопределенную внутреннюю часть, которая реализует эту функциональность. В настоящее время (июнь 2015 года) компиляторы более свежие, чем Visual C++ 8, clang, GCC-4.3, Greenhills 6.0, Intel-11.0 и Codegear, имеют необходимый компилятор intrinsics для обеспечения того, чтобы эта черта «просто работала». Вы также можете проверить наличие необходимых внутренностей , проверив, определен ли макрос BOOST_IS_UNION
.
Руководитель: type_traitsis_union.hpp>>>
.
Примеры:
union my_union {};
is_union<const my_union>::type
является типом true_type
.
is_union<my_union>::value
является интегральным постоянным выражением, которое оценивает до true.
is_union<my_union*>::значение
является интегральным постоянным выражением, которое оценивается как ложное.
is_union<T>::value_type
является типом bool
.