diff options
Diffstat (limited to 'clang/test/SemaCXX/implicit-member-functions.cpp')
-rw-r--r-- | clang/test/SemaCXX/implicit-member-functions.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/implicit-member-functions.cpp b/clang/test/SemaCXX/implicit-member-functions.cpp new file mode 100644 index 0000000..8451739 --- /dev/null +++ b/clang/test/SemaCXX/implicit-member-functions.cpp @@ -0,0 +1,52 @@ +// 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(); +} |