diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-12 17:34:23 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-12 17:34:23 +0000 |
commit | 1a22d2889b234fcb10cad83be231b113e6d3a8b3 (patch) | |
tree | 3541530945b1094d8edb43e46dbe3bd668a048f1 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 0501c63609a567b89289f3412e5d0225f239d7ea (diff) | |
download | bcm5719-llvm-1a22d2889b234fcb10cad83be231b113e6d3a8b3.tar.gz bcm5719-llvm-1a22d2889b234fcb10cad83be231b113e6d3a8b3.zip |
Lambdas have a deleted default constructor and a deleted copy
assignment operator, per C++ [expr.prim.lambda]p19. Make it so.
llvm-svn: 150345
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 467cf43797e..b8ea85bea96 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -4340,6 +4340,13 @@ bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM) { switch (CSM) { case CXXDefaultConstructor: IsConstructor = true; + + // C++11 [expr.lambda.prim]p19: + // The closure type associated with a lambda-expression has a + // deleted (8.4.3) default constructor. + if (RD->isLambda()) + return true; + break; case CXXCopyConstructor: IsConstructor = true; @@ -4621,6 +4628,12 @@ bool Sema::ShouldDeleteCopyAssignmentOperator(CXXMethodDecl *MD) { if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl()) return false; + // C++11 [expr.lambda.prim]p19: + // The closure type associated with a lambda-expression has a + // [...] deleted copy assignment operator. + if (RD->isLambda()) + return true; + SourceLocation Loc = MD->getLocation(); // Do access control from the constructor |