| // { dg-do compile { target c++11 } } |
| // { dg-additional-options { -Wno-pedantic } } |
| // PR c++/79118 failure to check initialization of anonymous members. |
| |
| struct One |
| { |
| union |
| { |
| int a; |
| int b; |
| }; |
| |
| constexpr One () : a(), b() {} // { dg-error "multiple" } |
| constexpr One (int) : a() {} |
| constexpr One (unsigned) : b () {} |
| constexpr One (void *) {} // { dg-error "exactly one" "" { target c++17_down } } |
| }; |
| |
| One a (); |
| One b (0); |
| One c (0u); |
| One d ((void *)0); |
| |
| struct Two |
| { |
| struct |
| { |
| int a; |
| int b; |
| }; |
| |
| constexpr Two () : a(), b() {} |
| constexpr Two (int) : a() {} // { dg-error "b' must be initialized" "" { target c++17_down } } |
| constexpr Two (unsigned) : b () {} // { dg-error "a' must be initialized" "" { target c++17_down } } |
| constexpr Two (void *) {} // { dg-error "a' must be initialized" "" { target c++17_down } } |
| // { dg-error "b' must be initialized" "" { target c++17_down } .-1 } |
| }; |
| |
| Two e (); |
| Two f (0); |
| Two g (0u); |
| Two h ((void *)0); |