cpp/language/default initialization

This is the initialization performed when an object is constructed with no initializer.

Explanation
Default initialization is performed in three situations: @1@ when a variable with automatic, static, or thread-local is declared with no initializer; @2@ when an object with dynamic storage duration is created by a with no initializer; @3@ when a base class or a non-static data member is not mentioned in a and that constructor is called.

The effects of default initialization are:
 * if is a (possibly cv-qualified)  class type, the constructors are considered and subjected to  against the empty argument list. The constructor selected (which is one of the s) is called to provide the initial value for the new object;
 * if is an array type, every element of the array is default-initialized;
 * otherwise, no initialization is performed (see notes).

Default initialization of a const object
If a program calls for the default-initialization of an object of a -qualified type, T shall be a const-default-constructible class type or array thereof.

A class type is const-default-constructible if default initialization of  would invoke a user-provided constructor of   or if

each potentially constructed base class of is const-default-constructible.

Read from an indeterminate byte
Use of an indeterminate value obtained by default-initializing a non-class variable of any type is (in particular, it may be a ), except in the following cases:
 * if an indeterminate value of type  is assigned to another variable of type (possibly cv-qualified)   (the value of the variable becomes indeterminate, but the behavior is not undefined);
 * if an indeterminate value of type  is used to initialize another variable of type (possibly cv-qualified)  ;
 * if an indeterminate value of type  results from
 * the second or third operand of a conditional expression,
 * the right operand of the comma operator,
 * the operand of a cast or conversion to (possibly cv-qualified) ,
 * a discarded-value expression.