A default constructor for a class X
is a constructor of class X
for which each parameter
that is not a function parameter pack
has a default argument
(including the case of a constructor with no parameters).
If there is no user-declared constructor for class
a non-explicit constructor having no parameters is implicitly declared
as defaulted ([dcl.fct.def]).
An implicitly-declared default constructor is an
inline public member of its class.
any potentially constructed subobject, except for a non-static data member
with a brace-or-equal-initializer, has
class type M (or array thereof) and either M
has no default constructor or overload resolution ([over.match])
as applied to find M's corresponding
constructor results in an ambiguity or in a function that is deleted or
inaccessible from the defaulted default constructor, or
A default constructor
that is defaulted and not defined as deleted
when it is odr-used ([basic.def.odr])
to create an object of its class type ([intro.object]),
when it is needed for constant evaluation ([expr.const]), or
when it is explicitly defaulted after its first declaration.
The implicitly-defined default constructor performs the set of
initializations of the class that would be performed by a user-written default
constructor for that class with no
ctor-initializer and an empty
If that user-written default constructor would be ill-formed,
the program is ill-formed.
If that user-written default constructor would satisfy the requirements
of a constexpr constructor ([dcl.constexpr]), the implicitly-defined
default constructor is constexpr.
Before the defaulted default constructor for a class is
all the non-user-provided default constructors for its base classes and
its non-static data members are implicitly defined.