|  | // 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(); | 
|  | } |