This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
[Accepted at the February, 2016 meeting as part of paper P0017R1.]
The definition of an aggregate class 9.4.2 [dcl.init.aggr] was originally intended to include only C-like classes because proper C++ classes were expected to encapsulate data members and use constructors for initialization. Consequently, classes with bases were excluded from being aggregates.
With the inclusion of aggregate initialization in list-initialization, the consequence of this decision could be surprising, so it should be reexamined. For example,
struct A { int& val; }; struct B { }; struct C : B { int& val; }; int main() { int i = 0; A a { i } ; // #1 C c { i } ; // #2 return 0; }
it is not clear that there is a good rationale for #1 being well-formed but #2 being ill-formed.
Rationale (October, 2012):
CWG felt that this language design question would be better considered by EWG.