1 // PR c++/91363 - P0960R3: Parenthesized initialization of aggregates. 2 // { dg-do compile { target c++2a } } 3 4 // Test ill-formed code. 5 6 // If k is greater than the size of the array, the program is ill-formed. 7 int a1[2](1, 2, 3); // { dg-error "too many initializers" } 8 int a2[](); // { dg-error "array of functions" } 9 int a3[](()); // { dg-error "expected primary-expression" } 10 int a4[]("raccoon"); // { dg-error "invalid conversion" } 11 12 struct S { 13 int i; 14 int j; 15 }; 16 17 S s1(1, 1, 1); // { dg-error "too many initializers" } 18 19 union U2 { 20 int a; 21 float b; 22 }; 23 24 // [dcl.init.aggr]/19: 25 // When a union is initialized with an initializer list, there shall not be 26 // more than one explicitly initialized element. 27 U2 u4 = U2(1, 2); // { dg-error "too many initializers" } 28 29 // Test there is no brace elision. 30 31 int a[2][2](1, 2, 3, 4); // { dg-error "too many initializers|array must be initialized with a brace-enclosed initializer" } 32 33 // private/protected/virtual base class -> not an aggregate. 34 struct B { }; 35 struct D : private B { 36 int i; 37 int j; 38 }; 39 40 D d({}, 1, 2); // { dg-error "no matching function" } 41 42 // Private non-static data member -> not an aggregate. 43 struct P { 44 int i; 45 private: 46 int j; 47 }; 48 49 P p(1, 2); // { dg-error "no matching function" } 50 51 // User-declared constructor -> not an aggregate. 52 struct U { UU53 U() {} 54 int i; 55 int j; 56 }; 57 58 U u(1, 2); // { dg-error "no matching function" } 59 60 // virtual member function -> not an aggregate. 61 struct V { 62 int i; 63 int j; 64 virtual int foo(int); 65 }; 66 67 V v(1, 2); // { dg-error "no matching function" } 68 69 struct nonaggr { 70 int i; 71 int j; 72 private: 73 int x; 74 }; 75 76 struct F { 77 nonaggr n; FF78 F() : n(1) { } // { dg-error "no matching function" } 79 }; 80 81 struct G { 82 char a[4]; 83 }; 84 85 struct H { 86 G g; HH87 H() : g("oaks") { } // { dg-error "initializer-string" } 88 }; 89