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