__has_trivial_default_constructor

From Appmethod Topics
Jump to: navigation, search

Go Up to Type Trait Functions (C++0x) Index


Category

Type Trait Functions

Syntax

bool __has_trivial_default_constructor (typename T )

Returns true if and only if T has a trivial default constructor.

Error if T is an incomplete type.

False (but well-formed) if a class type does not have a default constructor.

According to the definition from Section 20.4.4.3 of the Working Draft notes, a type T has a trivial copy assignment operator if:

  • a scalar type (or array thereof)
  • an array of class type with a trivial default constructor
  • a class type with a trivial default constructorr

Especially note false for reference types.

According to Section 21.1 p5 of the Working Draft, a default constructor is trivial if:

  • It is not user provided
  • Its class has no virtual functions
  • Its class has no virtual base classes
  • Each direct base class of X has a trivial copy assignment operator.
  • All the direct base classes of its class have trivial default constructors.
  • For all the non-static data members of its class that are of class type (or array thereof), each such class has a trivial default constructor.

A default consructor is not user provided if it is implicitly declared, or defined inline as = default;.

Ox interaction if the copy assign operator is defined as deleted.

Ox interaction false if the default constructor is defined as deleted.

Ox interaction with default function definitions.

See Also