7.10 Типовые признаки
Передняя часть C++ реализует синтаксические расширения, которые позволяют определить в ходе компиляции различные характеристики типа (или пары типов).
__has_nothrow_assign (type)-
Если
typeимеет квалификатор const или является типом ссылки, то признак ложный. В противном случае, если__has_trivial_assign (type)истинно, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами, и операторы копирующего присваивания не выбрасывают исключения, то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_nothrow_copy (type)-
Если
__has_trivial_copy (type)истинно, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами, и конструкторы копирования не выбрасывают исключения, то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_nothrow_constructor (type)-
Если
__has_trivial_constructor (type)истинно, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами (или массивом такого типа) и имеет конструктор по умолчанию, не выбрасывающий исключения, то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_trivial_assign (type)-
Если
typeимеет квалификатор const или является типом ссылки, то признак ложный. В противном случае, если__is_pod (type)истинно, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами и имеет тривиальный оператор копирующего присваивания ([class.copy]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_trivial_copy (type)-
Если
__is_pod (type)истинно илиtypeявляется типом ссылки, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами и имеет тривиальный конструктор копирования ([class.copy]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_trivial_constructor (type)-
Если
__is_pod (type)истинно, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами (или массивом такого типа) и имеет тривиальный конструктор по умолчанию ([class.ctor]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_trivial_destructor (type)-
Если
__is_pod (type)истинно илиtypeявляется типом ссылки, то признак истинный; в противном случае, еслиtypeявляется типом класса или объединения с cv-квалификаторами (или массивом такого типа) и имеет тривиальный деструктор ([class.dtor]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __has_virtual_destructor (type)-
Если
typeявляется типом класса с виртуальным деструктором ([class.dtor]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_abstract (type)-
Если
typeявляется абстрактным классом ([class.abstract]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_base_of (base_type, derived_type)-
Если
base_typeявляется базовым классом дляderived_type([class.derived]), то признак истинный; в противном случае он ложный. Квалификаторы cv верхнего уровня дляbase_typeиderived_typeигнорируются. Для целей этого признака тип класса считается собственным базовым классом. Требуется: если__is_class (base_type)и__is_class (derived_type)истинны, аbase_typeиderived_typeне являются одним и тем же типом (не учитывая cv-квалификаторы), тоderived_typeдолжен быть полным типом. Если это требование не выполняется, генерируется диагностическое сообщение. __is_class (type)-
Если
typeявляется типом класса с cv-квалификаторами, и не является типом объединения ([basic.compound]), то признак истинный; в противном случае он ложный. __is_empty (type)-
Если
__is_class (type)ложно, то признак ложный. В противном случае,typeсчитается пустым тогда и только тогда, когда:typeне имеет нестатических данных членов, или все нестатические данные члены, если таковые имеются, являются битовыми полями длиной 0, иtypeне имеет виртуальных членов, иtypeне имеет виртуальных базовых классов, иtypeне имеет базовых классовbase_type, для которых__is_empty (base_type)ложно. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_enum (type)-
Если
typeявляется типом перечисления с cv-квалификаторами ([basic.compound]), то признак истинный; в противном случае он ложный. __is_literal_type (type)-
Если
typeявляется типом-литералом ([basic.types]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_pod (type)-
Если
typeявляется типом POD с cv-квалификаторами ([basic.types]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_polymorphic (type)-
Если
typeявляется полиморфным классом ([class.virtual]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_standard_layout (type)-
Если
typeявляется типом стандартного расположения ([basic.types]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_trivial (type)-
Если
typeявляется тривиальным типом ([basic.types]), то признак истинный; в противном случае он ложный. Требуется:typeдолжен быть полным типом, (возможно с cv-квалификаторами)void, или массивом неопределённой длины. __is_union (type)-
Если
typeявляется типом объединения с cv-квалификаторами ([basic.compound]), то признак истинный; в противном случае он ложный. __underlying_type (type)-
Базовый тип
type. Требуется:typeдолжен быть типом перечисления ([dcl.enum]).
Далее: Исключения Java, Предыдущее: Ассоциация имен пространства имён, Вверх: Расширения C++ [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Type-Traits.html