Next: C++ Concepts, Previous: Function Multiversioning, Up: C++ Extensions [Contents][Index]
The C++ front end implements syntactic extensions that allow compile-time determination of various characteristics of a type (or of a pair of types).
__has_nothrow_assign (type)
If type
is const
-qualified or is a reference type then
the trait is false
. Otherwise if __has_trivial_assign (type)
is true
then the trait is true
, else if type
is
a cv-qualified class or union type with copy assignment operators that are
known not to throw an exception then the trait is true
, else it is
false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__has_nothrow_copy (type)
If __has_trivial_copy (type)
is true
then the trait is
true
, else if type
is a cv-qualified class or union type
with copy constructors that are known not to throw an exception then
the trait is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__has_nothrow_constructor (type)
If __has_trivial_constructor (type)
is true
then the trait
is true
, else if type
is a cv class or union type (or array
thereof) with a default constructor that is known not to throw an
exception then the trait is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__has_trivial_assign (type)
If type
is const
- qualified or is a reference type then
the trait is false
. Otherwise if __is_pod (type)
is
true
then the trait is true
, else if type
is
a cv-qualified class or union type with a trivial copy assignment
([class.copy]) then the trait is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__has_trivial_copy (type)
If __is_pod (type)
is true
or type
is a reference
type then the trait is true
, else if type
is a cv class
or union type with a trivial copy constructor ([class.copy]) then the trait
is true
, else it is false
. Requires: type
shall be
a complete type, (possibly cv-qualified) void
, or an array of unknown
bound.
__has_trivial_constructor (type)
If __is_pod (type)
is true
then the trait is true
,
else if type
is a cv-qualified class or union type (or array thereof)
with a trivial default constructor ([class.ctor]) then the trait is true
,
else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__has_trivial_destructor (type)
If __is_pod (type)
is true
or type
is a reference type
then the trait is true
, else if type
is a cv class or union
type (or array thereof) with a trivial destructor ([class.dtor]) then
the trait is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__has_virtual_destructor (type)
If type
is a class type with a virtual destructor
([class.dtor]) then the trait is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_abstract (type)
If type
is an abstract class ([class.abstract]) then the trait
is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_base_of (base_type, derived_type)
If base_type
is a base class of derived_type
([class.derived]) then the trait is true
, otherwise it is false
.
Top-level cv-qualifications of base_type
and
derived_type
are ignored. For the purposes of this trait, a
class type is considered is own base.
Requires: if __is_class (base_type)
and __is_class (derived_type)
are true
and base_type
and derived_type
are not the same
type (disregarding cv-qualifiers), derived_type
shall be a complete
type. A diagnostic is produced if this requirement is not met.
__is_class (type)
If type
is a cv-qualified class type, and not a union type
([basic.compound]) the trait is true
, else it is false
.
__is_empty (type)
If __is_class (type)
is false
then the trait is false
.
Otherwise type
is considered empty if and only if: type
has no non-static data members, or all non-static data members, if
any, are bit-fields of length 0, and type
has no virtual
members, and type
has no virtual base classes, and type
has no base classes base_type
for which
__is_empty (base_type)
is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_enum (type)
If type
is a cv enumeration type ([basic.compound]) the trait is
true
, else it is false
.
__is_literal_type (type)
If type
is a literal type ([basic.types]) the trait is
true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_pod (type)
If type
is a cv POD type ([basic.types]) then the trait is true
,
else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_polymorphic (type)
If type
is a polymorphic class ([class.virtual]) then the trait
is true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_standard_layout (type)
If type
is a standard-layout type ([basic.types]) the trait is
true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_trivial (type)
If type
is a trivial type ([basic.types]) the trait is
true
, else it is false
.
Requires: type
shall be a complete type, (possibly cv-qualified)
void
, or an array of unknown bound.
__is_union (type)
If type
is a cv union type ([basic.compound]) the trait is
true
, else it is false
.
__underlying_type (type)
The underlying type of type
.
Requires: type
shall be an enumeration type ([dcl.enum]).
__integer_pack (length)
When used as the pattern of a pack expansion within a template
definition, expands to a template argument pack containing integers
from 0
to length-1
. This is provided for efficient
implementation of std::make_integer_sequence
.
Next: C++ Concepts, Previous: Function Multiversioning, Up: C++ Extensions [Contents][Index]