| // RUN: %clang_cc1 -fsyntax-only -verify %s | 
 |  | 
 | struct A { }; | 
 | A::A() { } // expected-error {{definition of implicitly declared default constructor}} | 
 |  | 
 | struct B { }; | 
 | B::B(const B&) { } // expected-error {{definition of implicitly declared copy constructor}} | 
 |  | 
 | struct C { }; | 
 | C& C::operator=(const C&) { return *this; } // expected-error {{definition of implicitly declared copy assignment operator}} | 
 |  | 
 | struct D { }; | 
 | D::~D() { } // expected-error {{definition of implicitly declared destructor}} | 
 |  | 
 | // Make sure that the special member functions are introduced for | 
 | // name-lookup purposes and overload with user-declared | 
 | // constructors and assignment operators. | 
 | namespace PR6570 { | 
 |   class A { }; | 
 |  | 
 |   class B { | 
 |   public: | 
 |     B() {} | 
 |  | 
 |     B(const A& a) { | 
 |       operator = (CONST); | 
 |       operator = (a); | 
 |     } | 
 |  | 
 |     B& operator = (const A& a) { | 
 |       return *this; | 
 |     } | 
 |  | 
 |     void f(const A &a) { | 
 |       B b(a); | 
 |     }; | 
 |  | 
 |     static const B CONST; | 
 |   }; | 
 |  | 
 | } | 
 |  | 
 | namespace PR7594 { | 
 |   // If the lazy declaration of special member functions is triggered | 
 |   // in an out-of-line initializer, make sure the functions aren't in | 
 |   // the initializer scope. This used to crash Clang: | 
 |   struct C { | 
 |     C(); | 
 |     static C *c; | 
 |   }; | 
 |   C *C::c = new C(); | 
 | } |