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