| // PR c++/91353 - P1331R2: Allow trivial default init in constexpr contexts. |
| // { dg-do compile { target c++20 } } |
| |
| struct S { |
| int a = 1; |
| constexpr S() = default; |
| }; |
| |
| constexpr S s; |
| |
| union U { |
| int a = 1; |
| constexpr U() = default; |
| }; |
| |
| constexpr U u; |
| |
| struct S2 { |
| int a; |
| constexpr S2() = default; |
| }; |
| |
| constexpr S2 s2; // { dg-error "uninitialized .const s2." } |
| |
| union U2 { |
| int a; |
| constexpr U2() = default; |
| }; |
| |
| constexpr U2 u2; // { dg-error "uninitialized .const u2." } |
| |
| struct S3 { |
| // FIXME if it's anonymous union, we don't give the error below |
| union { |
| int a; |
| } u; |
| constexpr S3() = default; |
| }; |
| |
| constexpr S3 s3; // { dg-error "uninitialized .const s3." } |
| |
| struct S4 { |
| // FIXME if it's anonymous union, we don't give the error below |
| union { |
| int n; |
| } u; |
| constexpr S4() = default; |
| }; |
| |
| constexpr S4 s4; // { dg-error "uninitialized .const s4." } |
| |
| struct S5 { |
| union { |
| int n = 0; |
| }; |
| // FIXME if it's anonymous union, we don't give the error below |
| union { |
| int m; |
| } u; |
| constexpr S5() = default; |
| }; |
| |
| constexpr S5 s5; // { dg-error "uninitialized .const s5.|not a constant expression" } |