diff options
author | Alexis Hunt <alercah@gmail.com> | 2011-06-22 01:05:13 +0000 |
---|---|---|
committer | Alexis Hunt <alercah@gmail.com> | 2011-06-22 01:05:13 +0000 |
commit | d74c85fdcc7a88ee9acea3284a111de795424e42 (patch) | |
tree | c78dbad9528c8e9715efc1deaba5447a2c6fa04a /clang | |
parent | b5f652e3efdf2976e0bee22ec5606289e901232a (diff) | |
download | bcm5719-llvm-d74c85fdcc7a88ee9acea3284a111de795424e42.tar.gz bcm5719-llvm-d74c85fdcc7a88ee9acea3284a111de795424e42.zip |
Ensure that we delete implict copy members when explicit move members
are also present.
llvm-svn: 133593
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index a9b7ec317ea..de52b0aa5ea 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -6771,7 +6771,13 @@ CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) { PushOnScopeChains(CopyAssignment, S, false); ClassDecl->addDecl(CopyAssignment); - if (ShouldDeleteCopyAssignmentOperator(CopyAssignment)) + // C++0x [class.copy]p18: + // ... If the class definition declares a move constructor or move + // assignment operator, the implicitly declared copy assignment operator is + // defined as deleted; ... + if (ClassDecl->hasUserDeclaredMoveConstructor() || + ClassDecl->hasUserDeclaredMoveAssignment() || + ShouldDeleteCopyAssignmentOperator(CopyAssignment)) CopyAssignment->setDeletedAsWritten(); AddOverriddenMethods(ClassDecl, CopyAssignment); @@ -7233,7 +7239,13 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor( PushOnScopeChains(CopyConstructor, S, false); ClassDecl->addDecl(CopyConstructor); - if (ShouldDeleteCopyConstructor(CopyConstructor)) + // C++0x [class.copy]p7: + // ... If the class definition declares a move constructor or move + // assignment operator, the implicitly declared constructor is defined as + // deleted; ... + if (ClassDecl->hasUserDeclaredMoveConstructor() || + ClassDecl->hasUserDeclaredMoveAssignment() || + ShouldDeleteCopyConstructor(CopyConstructor)) CopyConstructor->setDeletedAsWritten(); return CopyConstructor; |