Date
2016-02-15.00:00:00
Message id
4191

Content

[Accepted at the February, 2016 meeting as part of paper P0017R1.]

The definition of an aggregate class 9.5.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.