Skip to content

Commit 5df6f72

Browse files
committed
Assert ShouldDeleteSpecialMember is called in C++ only
1 parent 383b460 commit 5df6f72

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9763,15 +9763,22 @@ bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD,
97639763
CXXSpecialMemberKind CSM,
97649764
InheritedConstructorInfo *ICI,
97659765
bool Diagnose) {
9766+
assert(LangOpts.CPlusPlus &&
9767+
"Special member function = default outside of C++?");
97669768
if (MD->isInvalidDecl())
97679769
return false;
97689770
CXXRecordDecl *RD = MD->getParent();
97699771
assert(!RD->isDependentType() && "do deletion after instantiation");
9770-
if (!LangOpts.CPlusPlus ||
9771-
(!LangOpts.CPlusPlus11 && !RD->isLambda() &&
9772-
!MD->isExplicitlyDefaulted()) ||
9773-
RD->isInvalidDecl())
9772+
if (RD->isInvalidDecl())
97749773
return false;
9774+
if (!LangOpts.CPlusPlus11) {
9775+
// Before C++11, implicitly-declared (defaulted) special member functions
9776+
// weren't defined as deleted.
9777+
// Allow lambda members and explicitly defaulted members to be defined
9778+
// as deleted before C++11 as an extension
9779+
if (!(RD->isLambda() || MD->isExplicitlyDefaulted()))
9780+
return false;
9781+
}
97759782

97769783
// C++11 [expr.lambda.prim]p19:
97779784
// The closure type associated with a lambda-expression has a

0 commit comments

Comments
 (0)