cpp/language/value initialization

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

Explanation
Value initialization is performed in these situations: @1,5@ when a nameless temporary object is created with the initializer consisting of an empty pair of parentheses ; @2,6@ when an object with dynamic storage duration is created by a with the initializer consisting of an empty pair of parentheses ; @3,7@ when a non-static data member or a base class is initialized using a with an empty pair of parentheses ;

In all cases, if the empty pair of braces is used and  is an aggregate type,  is performed instead of value-initialization.

The effects of value initialization are:

@1@ if is a class type with no  or with a  default constructor, the object is ; @2@ if is a class type with a default constructor that is  (that is, it may be a class with an implicitly-defined or defaulted default constructor), the object is  and the semantic constraints for default-initialization are checked, and if  has a non-trivial default constructor, the object is ; @3@ if is an array type, each element of the array is value-initialized; @4@ otherwise, the object is.