| // PR c++/91363 - P0960R3: Parenthesized initialization of aggregates. |
| // { dg-do compile { target c++20 } } |
| |
| // Test ill-formed code. |
| |
| // If k is greater than the size of the array, the program is ill-formed. |
| int a1[2](1, 2, 3); // { dg-error "too many initializers" } |
| int a2[](); // { dg-error "array of functions" } |
| int a3[](()); // { dg-error "expected primary-expression" } |
| int a4[]("raccoon"); // { dg-error "invalid conversion" } |
| |
| struct S { |
| int i; |
| int j; |
| }; |
| |
| S s1(1, 1, 1); // { dg-error "too many initializers" } |
| |
| union U2 { |
| int a; |
| float b; |
| }; |
| |
| // [dcl.init.aggr]/19: |
| // When a union is initialized with an initializer list, there shall not be |
| // more than one explicitly initialized element. |
| U2 u4 = U2(1, 2); // { dg-error "too many initializers" } |
| |
| // Test there is no brace elision. |
| |
| int a[2][2](1, 2, 3, 4); // { dg-error "too many initializers|array must be initialized with a brace-enclosed initializer" } |
| |
| // private/protected/virtual base class -> not an aggregate. |
| struct B { }; |
| struct D : private B { |
| int i; |
| int j; |
| }; |
| |
| D d({}, 1, 2); // { dg-error "no matching function" } |
| |
| // Private non-static data member -> not an aggregate. |
| struct P { |
| int i; |
| private: |
| int j; |
| }; |
| |
| P p(1, 2); // { dg-error "no matching function" } |
| |
| // User-declared constructor -> not an aggregate. |
| struct U { |
| U() {} |
| int i; |
| int j; |
| }; |
| |
| U u(1, 2); // { dg-error "no matching function" } |
| |
| // virtual member function -> not an aggregate. |
| struct V { |
| int i; |
| int j; |
| virtual int foo(int); |
| }; |
| |
| V v(1, 2); // { dg-error "no matching function" } |
| |
| struct nonaggr { |
| int i; |
| int j; |
| private: |
| int x; |
| }; |
| |
| struct F { |
| nonaggr n; |
| F() : n(1) { } // { dg-error "no matching function" } |
| }; |
| |
| struct G { |
| char a[4]; |
| }; |
| |
| struct H { |
| G g; |
| H() : g("oaks") { } // { dg-error "initializer-string" } |
| }; |