@@ -45,6 +45,14 @@ using namespace clang;
45
45
// ===----------------------------------------------------------------------===//
46
46
47
47
48
+ namespace {
49
+ template <class TemplateParam >
50
+ bool DefaultArgumentContainsUnexpandedPack (const TemplateParam& P) {
51
+ return P.hasDefaultArgument () &&
52
+ P.getDefaultArgument ().getArgument ().containsUnexpandedParameterPack ();
53
+ }
54
+ }
55
+
48
56
TemplateParameterList::TemplateParameterList (const ASTContext& C,
49
57
SourceLocation TemplateLoc,
50
58
SourceLocation LAngleLoc,
@@ -64,10 +72,7 @@ TemplateParameterList::TemplateParameterList(const ASTContext& C,
64
72
if (!IsPack) {
65
73
if (NTTP->getType ()->containsUnexpandedParameterPack ())
66
74
ContainsUnexpandedParameterPack = true ;
67
- else if (NTTP->hasDefaultArgument () &&
68
- NTTP->getDefaultArgument ()
69
- .getArgument ()
70
- .containsUnexpandedParameterPack ())
75
+ else if (DefaultArgumentContainsUnexpandedPack (*NTTP))
71
76
ContainsUnexpandedParameterPack = true ;
72
77
}
73
78
if (NTTP->hasPlaceholderTypeConstraint ())
@@ -76,17 +81,11 @@ TemplateParameterList::TemplateParameterList(const ASTContext& C,
76
81
if (!IsPack) {
77
82
if (TTP->getTemplateParameters ()->containsUnexpandedParameterPack ())
78
83
ContainsUnexpandedParameterPack = true ;
79
- else if (TTP->hasDefaultArgument () &&
80
- TTP->getDefaultArgument ()
81
- .getArgument ()
82
- .containsUnexpandedParameterPack ())
84
+ else if (DefaultArgumentContainsUnexpandedPack (*TTP))
83
85
ContainsUnexpandedParameterPack = true ;
84
86
}
85
87
} 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)) {
90
89
ContainsUnexpandedParameterPack = true ;
91
90
} else if (const TypeConstraint *TC = TTP->getTypeConstraint ();
92
91
TC && TC->getImmediatelyDeclaredConstraint ()
0 commit comments