| // PR c++/91363 - P0960R3: Parenthesized initialization of aggregates. |
| // { dg-do run { target c++20 } } |
| |
| struct A { |
| int i = 0; |
| int j = 0; |
| }; |
| |
| struct B { |
| A a; |
| constexpr B() : a(1.1, 2) { } |
| }; |
| |
| struct C { |
| int i; |
| }; |
| |
| struct E { |
| C c; |
| E() : c(1.2) { } |
| }; |
| |
| struct F { |
| char a[4]; |
| }; |
| |
| struct G { |
| F f; |
| G() : f("yew") { } |
| }; |
| |
| struct H { |
| int i; |
| int &&r; |
| }; |
| |
| int f() { return 42; } |
| |
| struct I { |
| H h; |
| I() : h(1, f()) { } |
| }; |
| |
| I i; // dangling ref to f(): |
| // {.i=1, .r=(int &) &TARGET_EXPR <D.2118, f ()>} |
| |
| int |
| main () |
| { |
| B b; |
| if (b.a.i != 1 || b.a.j != 2) |
| __builtin_abort (); |
| E e; |
| if (e.c.i != 1) |
| __builtin_abort (); |
| } |