Skip to content

Commit 34a18e0

Browse files
committed
fixup! [Sema] Default arguments for template parameters affect ContainsUnexpandedPacks
Add a helper function to avoid code duplication.
1 parent ad2d2f4 commit 34a18e0

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

clang/lib/AST/DeclTemplate.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ using namespace clang;
4545
//===----------------------------------------------------------------------===//
4646

4747

48+
namespace {
49+
template<class TemplateParam>
50+
bool DefaultArgumentContainsUnexpandedPack(const TemplateParam& P) {
51+
return P.hasDefaultArgument() &&
52+
P.getDefaultArgument().getArgument().containsUnexpandedParameterPack();
53+
}
54+
}
55+
4856
TemplateParameterList::TemplateParameterList(const ASTContext& C,
4957
SourceLocation TemplateLoc,
5058
SourceLocation LAngleLoc,
@@ -64,10 +72,7 @@ TemplateParameterList::TemplateParameterList(const ASTContext& C,
6472
if (!IsPack) {
6573
if (NTTP->getType()->containsUnexpandedParameterPack())
6674
ContainsUnexpandedParameterPack = true;
67-
else if (NTTP->hasDefaultArgument() &&
68-
NTTP->getDefaultArgument()
69-
.getArgument()
70-
.containsUnexpandedParameterPack())
75+
else if (DefaultArgumentContainsUnexpandedPack(*NTTP))
7176
ContainsUnexpandedParameterPack = true;
7277
}
7378
if (NTTP->hasPlaceholderTypeConstraint())
@@ -76,17 +81,11 @@ TemplateParameterList::TemplateParameterList(const ASTContext& C,
7681
if (!IsPack) {
7782
if (TTP->getTemplateParameters()->containsUnexpandedParameterPack())
7883
ContainsUnexpandedParameterPack = true;
79-
else if (TTP->hasDefaultArgument() &&
80-
TTP->getDefaultArgument()
81-
.getArgument()
82-
.containsUnexpandedParameterPack())
84+
else if (DefaultArgumentContainsUnexpandedPack(*TTP))
8385
ContainsUnexpandedParameterPack = true;
8486
}
8587
} else if (const auto *TTP = dyn_cast<TemplateTypeParmDecl>(P)) {
86-
if (!IsPack && TTP->hasDefaultArgument() &&
87-
TTP->getDefaultArgument()
88-
.getArgument()
89-
.containsUnexpandedParameterPack()) {
88+
if (!IsPack && DefaultArgumentContainsUnexpandedPack(*TTP)) {
9089
ContainsUnexpandedParameterPack = true;
9190
} else if (const TypeConstraint *TC = TTP->getTypeConstraint();
9291
TC && TC->getImmediatelyDeclaredConstraint()

0 commit comments

Comments
 (0)