diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-08-06 02:25:10 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-08-06 02:25:10 +0000 |
commit | eef00293897a73cc47f4d42e2653ff47c59d6030 (patch) | |
tree | f692e2ead307b2f1360a51537a25b7716cc86a76 /test/SemaCXX/cxx0x-defaulted-functions.cpp | |
parent | a841c19f7860393d6319bf40e9d662284462771d (diff) |
PR13527: don't assert if a function is explicitly defaulted when it's already
been defined.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161315 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/cxx0x-defaulted-functions.cpp')
-rw-r--r-- | test/SemaCXX/cxx0x-defaulted-functions.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/SemaCXX/cxx0x-defaulted-functions.cpp b/test/SemaCXX/cxx0x-defaulted-functions.cpp index 61c4c3338c..ce7ee672ea 100644 --- a/test/SemaCXX/cxx0x-defaulted-functions.cpp +++ b/test/SemaCXX/cxx0x-defaulted-functions.cpp @@ -117,3 +117,35 @@ namespace DefaultedFnExceptionSpec { }; OdrUse use; // expected-note {{implicit default constructor for 'DefaultedFnExceptionSpec::OdrUse' first required here}} } + +namespace PR13527 { + struct X { + X() = delete; // expected-note {{here}} + X(const X&) = delete; // expected-note {{here}} + X(X&&) = delete; // expected-note {{here}} + X &operator=(const X&) = delete; // expected-note {{here}} + X &operator=(X&&) = delete; // expected-note {{here}} + ~X() = delete; // expected-note {{here}} + }; + X::X() = default; // expected-error {{redefinition}} + X::X(const X&) = default; // expected-error {{redefinition}} + X::X(X&&) = default; // expected-error {{redefinition}} + X &X::operator=(const X&) = default; // expected-error {{redefinition}} + X &X::operator=(X&&) = default; // expected-error {{redefinition}} + X::~X() = default; // expected-error {{redefinition}} + + struct Y { + Y() = default; + Y(const Y&) = default; + Y(Y&&) = default; + Y &operator=(const Y&) = default; + Y &operator=(Y&&) = default; + ~Y() = default; + }; + Y::Y() = default; // expected-error {{definition of explicitly defaulted}} + Y::Y(const Y&) = default; // expected-error {{definition of explicitly defaulted}} + Y::Y(Y&&) = default; // expected-error {{definition of explicitly defaulted}} + Y &Y::operator=(const Y&) = default; // expected-error {{definition of explicitly defaulted}} + Y &Y::operator=(Y&&) = default; // expected-error {{definition of explicitly defaulted}} + Y::~Y() = default; // expected-error {{definition of explicitly defaulted}} +} |