xref: /llvm-project/clang/test/CXX/class/class.base/class.base.init/p5-0x.cpp (revision 0f65d59e5224ad9ed16ae0db9c700b73b7988d94)
1*0f65d59eSDavid Blaikie // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2*0f65d59eSDavid Blaikie 
3*0f65d59eSDavid Blaikie // [class.base.init]p5
4*0f65d59eSDavid Blaikie // A ctor-initializer may initialize a variant member of the constructor’s
5*0f65d59eSDavid Blaikie // class. If a ctor-initializer specifies more than one mem-initializer for the
6*0f65d59eSDavid Blaikie // same member or for the same base class, the ctor-initializer is ill-formed.
7*0f65d59eSDavid Blaikie 
8*0f65d59eSDavid Blaikie union E {
9*0f65d59eSDavid Blaikie   int a;
10*0f65d59eSDavid Blaikie   int b;
E()11*0f65d59eSDavid Blaikie   E() : a(1),  // expected-note{{previous initialization is here}}
12*0f65d59eSDavid Blaikie         b(2) { // expected-error{{initializing multiple members of union}}
13*0f65d59eSDavid Blaikie   }
14*0f65d59eSDavid Blaikie };
15*0f65d59eSDavid Blaikie 
16*0f65d59eSDavid Blaikie union F {
17*0f65d59eSDavid Blaikie   struct {
18*0f65d59eSDavid Blaikie     int a;
19*0f65d59eSDavid Blaikie     int b;
20*0f65d59eSDavid Blaikie   };
21*0f65d59eSDavid Blaikie   int c;
F()22*0f65d59eSDavid Blaikie   F() : a(1),  // expected-note{{previous initialization is here}}
23*0f65d59eSDavid Blaikie         b(2),
24*0f65d59eSDavid Blaikie         c(3) { // expected-error{{initializing multiple members of union}}
25*0f65d59eSDavid Blaikie   }
26*0f65d59eSDavid Blaikie };
27