| 1 | // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s |
| 2 | |
| 3 | int n; |
| 4 | struct S { |
| 5 | int &a; // expected-note 2{{here}} |
| 6 | int &b = n; |
| 7 | |
| 8 | union { |
| 9 | const int k = 42; |
| 10 | }; |
| 11 | |
| 12 | S() {} // expected-error {{constructor for 'S' must explicitly initialize the reference member 'a'}} |
| 13 | S(int) : a(n) {} // ok |
| 14 | S(char) : b(n) {} // expected-error {{constructor for 'S' must explicitly initialize the reference member 'a'}} |
| 15 | S(double) : a(n), b(n) {} // ok |
| 16 | } s(0); |
| 17 | |
| 18 | union U { |
| 19 | int a = 0; // expected-note {{previous initialization}} |
| 20 | char b = 'x'; // expected-error {{initializing multiple members of union}} |
| 21 | |
| 22 | U() {} |
| 23 | U(int) : a(1) {} |
| 24 | U(char) : b('y') {} |
| 25 | U(double) : a(1), // expected-note{{previous initialization is here}} |
| 26 | b('y') {} // expected-error{{initializing multiple members of union}} |
| 27 | }; |
| 28 | |
| 29 | // PR10954: variant members do not acquire an implicit initializer. |
| 30 | namespace VariantMembers { |
| 31 | struct NoDefaultCtor { |
| 32 | NoDefaultCtor(int); |
| 33 | }; |
| 34 | union V { |
| 35 | NoDefaultCtor ndc; |
| 36 | int n; |
| 37 | |
| 38 | V() {} |
| 39 | V(int n) : n(n) {} |
| 40 | V(int n, bool) : ndc(n) {} |
| 41 | }; |
| 42 | struct K { |
| 43 | union { |
| 44 | NoDefaultCtor ndc; |
| 45 | int n; |
| 46 | }; |
| 47 | K() {} |
| 48 | K(int n) : n(n) {} |
| 49 | K(int n, bool) : ndc(n) {} |
| 50 | }; |
| 51 | struct Nested { |
| 52 | Nested() {} |
| 53 | union { |
| 54 | struct { |
| 55 | NoDefaultCtor ndc; |
| 56 | }; |
| 57 | }; |
| 58 | }; |
| 59 | } |
| 60 | |