@@ -2792,6 +2792,16 @@ class AnnotatingParser {
27922792 return true ;
27932793 }
27942794
2795+ auto IsNonVariableTemplate = [](const FormatToken &Tok) {
2796+ if (Tok.isNot (TT_TemplateCloser))
2797+ return false ;
2798+ const auto *Less = Tok.MatchingParen ;
2799+ if (!Less)
2800+ return false ;
2801+ const auto *BeforeLess = Less->getPreviousNonComment ();
2802+ return BeforeLess && BeforeLess->isNot (TT_VariableTemplate);
2803+ };
2804+
27952805 // Heuristically try to determine whether the parentheses contain a type.
27962806 auto IsQualifiedPointerOrReference = [](const FormatToken *T,
27972807 const LangOptions &LangOpts) {
@@ -2825,10 +2835,11 @@ class AnnotatingParser {
28252835 }
28262836 return T && T->is (TT_PointerOrReference);
28272837 };
2828- bool ParensAreType =
2829- BeforeRParen->isOneOf (TT_TemplateCloser, TT_TypeDeclarationParen) ||
2830- BeforeRParen->isTypeName (LangOpts) ||
2831- IsQualifiedPointerOrReference (BeforeRParen, LangOpts);
2838+
2839+ bool ParensAreType = IsNonVariableTemplate (*BeforeRParen) ||
2840+ BeforeRParen->is (TT_TypeDeclarationParen) ||
2841+ BeforeRParen->isTypeName (LangOpts) ||
2842+ IsQualifiedPointerOrReference (BeforeRParen, LangOpts);
28322843 bool ParensCouldEndDecl =
28332844 AfterRParen->isOneOf (tok::equal, tok::semi, tok::l_brace, tok::greater);
28342845 if (ParensAreType && !ParensCouldEndDecl)
0 commit comments