Created on 2009-10-20.00:00:00 last changed 190 months ago
[Voted into WP at March, 2010 meeting.]
Proposed resolution (October, 2009):
Move the S2 example from bullet 3 to bullet 1 in 9.5.5 [dcl.init.list] paragraph 3:
If T is an aggregate, aggregate initialization is performed (9.5.2 [dcl.init.aggr]).
[Example:
double ad[] = { 1, 2.0 }; // OK
int ai[] = { 1, 2.0 }; // error: narrowing
struct S2 {
int m1;
double m2,m3;
};
S2 s21 = { 1, 2, 3.0 }; // OK
S2 s22 { 1.0, 2, 3 }; // error: narrowing
S2 s23 {}; // OK: default to 0,0,0
—end example]
Otherwise, if T is a specialization...
Otherwise, if T is a class type...
[Example:
...
S s3 { }; // OK: invoke #2
struct S2 {
int m1;
double m2,m3;
};
S2 s21 = { 1, 2, 3.0 }; // OK
S2 s22 { 1.0, 2, 3 }; // error: narrowing
S2 s23 {}; // OK: default to 0,0,0
—end example]
...
The final set of declarations in the example following 9.5.5 [dcl.init.list] bullet 3.3 is:
struct S2 {
int m1;
double m2,m3;
};
S2 s21 = { 1, 2, 3.0 }; // OK
S2 s22 { 1.0, 2, 3 }; // error: narrowing
S2 s23 {}; // OK: default to 0,0,0
However, S2 is an aggregate. Aggregates are handled in bullet 1, while bullet 3 deals with classes with constructors. This part of the example should be moved to the first bullet.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2010-03-29 00:00:00 | admin | set | messages: + msg2713 |
| 2010-03-29 00:00:00 | admin | set | status: ready -> cd2 |
| 2009-11-08 00:00:00 | admin | set | messages: + msg2364 |
| 2009-10-20 00:00:00 | admin | create | |