// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s class S { public: S (); }; struct D : S { D() : b1(0), // expected-note {{previous initialization is here}} b2(1), b1(0), // expected-error {{multiple initializations given for non-static member 'b1'}} S(), // expected-note {{previous initialization is here}} S() // expected-error {{multiple initializations given for base 'S'}} {} int b1; int b2; }; struct A { struct { int a; int b; }; A(); }; A::A() : a(10), b(20) { } namespace Test1 { template<typename T> struct A {}; template<typename T> struct B : A<T> { B() : A<T>(), // expected-note {{previous initialization is here}} A<T>() { } // expected-error {{multiple initializations given for base 'A<T>'}} }; } namespace Test2 { template<typename T> struct A : T { A() : T(), // expected-note {{previous initialization is here}} T() { } // expected-error {{multiple initializations given for base 'T'}} }; } namespace Test3 { template<typename T> struct A { T t; A() : t(1), // expected-note {{previous initialization is here}} t(2) { } // expected-error {{multiple initializations given for non-static member 't'}} }; } namespace test4 { class A { union { struct { int a; int b; }; int c; union { int d; int e; }; }; A(char _) : a(0), b(0) {} A(short _) : a(0), c(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}} A(int _) : d(0), e(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}} A(long _) : a(0), d(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}} }; } namespace test5 { struct Base { Base(int); }; struct A : Base { A() : decltype(Base(1))(3) { } A(int) : Base(3), // expected-note {{previous initialization is here}} decltype(Base(1))(2), // expected-error {{multiple initializations given for base 'decltype(test5::Base(1))' (aka 'test5::Base')}} decltype(int())() { // expected-error {{constructor initializer 'decltype(int())' (aka 'int') does not name a class}} } A(float) : decltype(A())(3) { } }; } namespace rdar13185264 { class X { X() : a(), // expected-note{{previous initialization is here}} a() { } // expected-error{{multiple initializations given for non-static member 'a'}} union { void *a; }; }; } namespace PR16596 { class A { public: virtual ~A(); }; typedef const A Foo; void Apply(Foo processor); struct Bar : public Foo {}; void Fetch() { Apply(Bar()); } }