-15- A new-expression that creates an object of type T initializes that object as follows:
* If the new-initializer is omitted:
* If T is a (possibly cv-qualified) non-POD class type (or array thereof), the object is default-initialized If T is a const-qualified type, the underlying class type shall have a user-declared default constructor.
* Otherwise, the object created has indeterminate value. If T is a const-qualified type, or a (possibly cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of const-qualified type, the program is ill-formed;
* If the new-initializer is of the form (), default-initialization shall be performed;
-5- To zero-initialize storage for an object of type T means:
* if T is a scalar type, the storage is set to the value of 0 (zero) converted to T;
* if T is a non-union class type, the storage for each nonstatic data member and each base-class subobject is zero-initialized;
* if T is a union type, the storage for its first data member is zero-initialized;
This member must not be static, by virtue of the requirements in class.union.
* if T is an array type, the storage for each element is zero-initialized;
* if T is a reference type, no initialization is performed.
To default-initialize an object of type T means:
* if T is a non-POD class type (clause class), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
* if T is an array type, each element is default-initialized;
* otherwise, the storage for the object is zero-initialized.