Spec-Zone.ru › GCC 4

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 является типом cv POD ([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]).

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Type-Traits.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API