8 An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
[ Note: since () is not permitted by the syntax for initializer,
X a();
is not the declaration of an object of class X, but the declaration of a function taking no argument and returning an X.
The form () is permitted in certain other initialization contexts (5.3.4, 5.2.3, 12.6.2). —end note ]
9 If no initializer is specified for an object, and the object is of (possibly cv-qualified) non-POD class type (or array
thereof), the object shall be default-initialized; if the object is of const-qualified type, the underlying class type shall
have a user-declared default constructor.
Otherwise, if no initializer is specified for a non-static object, the object and
its subobjects, if any, have an indeterminate initial value97); if the object or any of its subobjects are of const-qualified
type, the program is ill-formed.
97) This does not apply to aggregate objects with automatic storage duration initialized with an incomplete brace-enclosed initializer-list; see 8.5.1.