1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 struct A { }; 4 A::A() { } // expected-error {{definition of implicitly declared default constructor}} 5 6 struct B { }; 7 B::B(const B&) { } // expected-error {{definition of implicitly declared copy constructor}} 8 9 struct C { }; 10 C& C::operator=(const C&) { return *this; } // expected-error {{definition of implicitly declared copy assignment operator}} 11 12 struct D { }; 13 D::~D() { } // expected-error {{definition of implicitly declared destructor}} 14 15 // Make sure that the special member functions are introduced for 16 // name-lookup purposes and overload with user-declared 17 // constructors and assignment operators. 18 namespace PR6570 { 19 class A { }; 20 21 class B { 22 public: 23 B() {} 24 25 B(const A& a) { 26 operator = (CONST); 27 operator = (a); 28 } 29 30 B& operator = (const A& a) { 31 return *this; 32 } 33 34 void f(const A &a) { 35 B b(a); 36 }; 37 38 static const B CONST; 39 }; 40 41 } 42 43 namespace PR7594 { 44 // If the lazy declaration of special member functions is triggered 45 // in an out-of-line initializer, make sure the functions aren't in 46 // the initializer scope. This used to crash Clang: 47 struct C { 48 C(); 49 static C *c; 50 }; 51 C *C::c = new C(); 52 } 53