[dcl.init.general] (original) (raw)
Otherwise, if no constructor is viable, the destination type is an aggregate class, and the initializer is a parenthesized expression-list, the object is initialized as follows.
Let , …, be the elements of the aggregate ([dcl.init.aggr]).
If k is greater than n, the program is ill-formed.
The element is copy-initialized with for 1 ≤ i ≤ k.
The remaining elements are initialized with their default member initializers, if any, and otherwise are value-initialized.
For each , every value computation and side effect associated with the initialization of is sequenced before those associated with the initialization of .
[Note 7:
By contrast with direct-list-initialization, narrowing conversions ([dcl.init.list]) can appear, designators are not permitted, a temporary object bound to a reference does not have its lifetime extended ([class.temporary]), and there is no brace elision.
[Example 3: struct A { int a;int&& r;};int f();int n = 10; A a1{1, f()}; A a2(1, f()); A a3{1.0, 1}; A a4(1.0, 1); A a5(1.0, std::move(n)); — _end example_]
— _end note_]