8.9 Характеристики типов
Фронтенд C++ реализует синтаксические расширения, позволяющие во время компиляции определять различные характеристики типа (или пары типов).
-
Встроенная функция:
bool__has_nothrow_assign(type) Если type имеет квалификатор
constили является ссылочным типом, то характеристика равнаfalse. В противном случае, если__has_trivial_assign (type)равноtrue, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения с операторами копирующего присваивания, про которые известно, что они не генерируют исключений, то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_nothrow_copy(type) Если
__has_trivial_copy (type)равноtrue, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения с конструкторами копирования, про которые известно, что они не генерируют исключений, то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_nothrow_constructor(type) Если
__has_trivial_constructor (type)равноtrue, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения (или массивом такого типа) с конструктором по умолчанию, про который известно, что он не генерирует исключений, то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_trivial_assign(type) Если type имеет квалификатор
constили является ссылочным типом, то характеристика равнаfalse. В противном случае, если__is_trivial (type)равноtrue, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения с тривиальным копирующим присваиванием ([class.copy]), то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_trivial_copy(type) Если
__is_trivial (type)равноtrueили type является ссылочным типом, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения с тривиальным конструктором копирования ([class.copy]), то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_trivial_constructor(type) Если
__is_trivial (type)равноtrue, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения (или массивом такого типа) с тривиальным конструктором по умолчанию ([class.ctor]), то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_trivial_destructor(type) Если
__is_trivial (type)равноtrueили type является ссылочным типом, то характеристика равнаtrue; иначе, если type является cv-квалифицированным типом класса или объединения (или массивом такого типа) с тривиальным деструктором ([class.dtor]), то характеристика равнаtrue, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__has_virtual_destructor(type) Если type является типом класса с виртуальным деструктором ([class.dtor]), то характеристика равна
true, иначе она равнаfalse. Требуется: если type является типом класса, не являющегося объединением, он должен быть полным типом.
-
Встроенная функция:
bool__is_abstract(type) Если type является абстрактным классом ([class.abstract]), то характеристика равна
true, иначе она равнаfalse. Требуется: если type является типом класса, не являющегося объединением, он должен быть полным типом.
-
Встроенная функция:
bool__is_aggregate(type) Если type является агрегатным типом ([dcl.init.aggr]), то характеристика равна
true, иначе она равнаfalse. Требуется: если type является типом класса, он должен быть полным типом.
-
Встроенная функция:
bool__is_base_of(base_type, derived_type) Если base_type является базовым классом derived_type ([class.derived]), то характеристика равна
true, иначе она равнаfalse. Квалификаторы cv верхнего уровня для base_type и derived_type игнорируются. Для целей этой характеристики тип класса считается собственным базовым классом. Характеристика равнаtrue, даже если base_type является неоднозначным или недоступным базовым классом derived_type. Требуется: если__is_class (base_type)и__is_class (derived_type)равныtrueи base_type и derived_type не являются одним и тем же типом (без учета cv-квалификаторов), derived_type должен быть полным типом. Если это требование не выполнено, выдается диагностическое сообщение.
-
Встроенная функция:
bool__builtin_is_virtual_base_of(base_type, derived_type) Если base_type является виртуальным базовым классом derived_type ([class.derived], [class.mi]), то характеристика равна
true, иначе она равнаfalse. Квалификаторы cv верхнего уровня для base_type и derived_type игнорируются. Характеристика равнаtrue, даже если base_type является неоднозначным или недоступным виртуальным базовым классом derived_type. Требуется: если__is_class (base_type)и__is_class (derived_type)равныtrue, derived_type должен быть полным типом. Если это требование не выполнено, выдается диагностическое сообщение.
-
Встроенная функция:
bool__is_class(type) Если type является cv-квалифицированным типом класса, но не типом объединения ([basic.compound]), то характеристика равна
true, иначе она равнаfalse.
-
Встроенная функция:
bool__is_empty(type) Если
__is_class (type)равноfalse, то характеристика равнаfalse. В противном случае type считается пустым тогда и только тогда, когда: type не имеет нестатических полей данных либо все имеющиеся нестатические поля данных являются битовыми полями длины 0; type не имеет виртуальных членов; type не имеет виртуальных базовых классов; type не имеет базовых классов base_type, для которых__is_empty (base_type)равноfalse. Требуется: если type является типом класса, не являющегося объединением, он должен быть полным типом.
-
Встроенная функция:
bool__is_enum(type) Если type является cv-квалифицированным перечислимым типом ([basic.compound]), то характеристика равна
true, иначе она равнаfalse.
-
Встроенная функция:
bool__is_final(type) Если тип type является типом класса или объединения с пометкой
final, то характеристика равнаtrue, иначе она равнаfalse. Требуется: если type является типом класса, он должен быть полным типом.
-
Встроенная функция:
bool__is_literal_type(type) Если type является литеральным типом ([basic.types]), то характеристика равна
true, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__is_pod(type) Если type является cv-квалифицированным POD-типом ([basic.types]), то характеристика равна
true, иначе она равнаfalse. Требуется: type должен быть полным типом, (возможно, cv-квалифицированным)voidили массивом неизвестной границы.
-
Встроенная функция:
bool__is_polymorphic(type) Если type является полиморфным классом ([class.virtual]), то характеристика равна
true, иначе она равнаfalse. Требуется: если type является типом класса, не являющегося объединением, он должен быть полным типом.
-
Встроенная функция:
bool__is_standard_layout(type) Если type является типом со стандартным размещением ([basic.types]), то характеристика равна
true, иначе она равнаfalse. Требуется: type должен быть полным типом, массивом полных типов или (возможно, cv-квалифицированным)void.
-
Встроенная функция:
bool__is_trivial(type) Если type является тривиальным типом ([basic.types]), то характеристика равна
true, иначе она равнаfalse. Требуется: type должен быть полным типом, массивом полных типов или (возможно, cv-квалифицированным)void.
-
Встроенная функция:
bool__is_union(type) Если type является cv-квалифицированным типом объединения ([basic.compound]), то характеристика равна
true, иначе она равнаfalse.
-
Встроенная функция:
bool__underlying_type(type) Базовый тип type. Требуется: type должен быть перечислимым типом ([dcl.enum]).
-
Встроенная функция:
bool__integer_pack(length) При использовании в качестве шаблона раскрытия пакета внутри определения шаблона разворачивается в пакет аргументов шаблона, содержащий целые числа от
0доlength-1. Это средство предоставлено для эффективной реализацииstd::make_integer_sequence.
-
Встроенная функция:
bool__is_same(type1, type2) Бинарная характеристика типов:
true, если type1 и type2 обозначают один и тот же тип.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Type-Traits.html