[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_]