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