Home | History | Annotate | Download | only in SemaCXX
      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