A type is DefaultConstructible if it has a default constructor,
that is, if it is possible to construct an object of that type
without initializing the object to any particular value.
[1]
The form X x = X() is not guaranteed to be a valid expression,
because it uses a copy constructor. A type that is
DefaultConstructible is not necessarily Assignable