@@ -2104,8 +2104,6 @@ void TemplateSimplifier::expandTemplate(
21042104 Token * const beforeTypeToken = mTokenList .back ();
21052105 bool pointerType = false ;
21062106 const bool isVariadicTemplateArg = templateDeclaration.isVariadic () && itype + 1 == typeParametersInDeclaration.size ();
2107- if (isVariadicTemplateArg && mTypesUsedInTemplateInstantiation .size () > 1 && !Token::Match (tok3->next (), " ...|<" ))
2108- continue ;
21092107 if (isVariadicTemplateArg && Token::Match (tok3, " %name% ... %name%" ))
21102108 tok3 = tok3->tokAt (2 );
21112109 if (!isVariadicTemplateArg && copy && Token::Match (mTypesUsedInTemplateInstantiation [itype].token (), " %num% ,|>|>>" ) &&
@@ -2130,6 +2128,7 @@ void TemplateSimplifier::expandTemplate(
21302128 }
21312129 }
21322130 const std::string endStr (isVariadicTemplateArg ? " >" : " ,>" );
2131+ Token* begPar = nullptr ;
21332132 for (Token *typetok = mTypesUsedInTemplateInstantiation [itype].token ();
21342133 typetok && (typeindentlevel > 0 || endStr.find (typetok->str ()[0 ]) == std::string::npos);
21352134 typetok = typetok->next ()) {
@@ -2153,6 +2152,10 @@ void TemplateSimplifier::expandTemplate(
21532152 --typeindentlevel;
21542153 Token *back;
21552154 if (copy) {
2155+ if (isVariadicTemplateArg && typetok == mTypesUsedInTemplateInstantiation [itype].token () && typetok->isLiteral ()) {
2156+ mTokenList .addtoken (" (" , mTokenList .back ());
2157+ begPar = mTokenList .back ();
2158+ }
21562159 mTokenList .addtoken (typetok, tok3);
21572160 back = mTokenList .back ();
21582161 } else
@@ -2181,6 +2184,10 @@ void TemplateSimplifier::expandTemplate(
21812184 if (copy)
21822185 back->templateArgFrom (typetok);
21832186 }
2187+ if (begPar) {
2188+ mTokenList .addtoken (" )" , mTokenList .back ());
2189+ Token::createMutualLinks (begPar, mTokenList .back ());
2190+ }
21842191 if (pointerType && Token::simpleMatch (beforeTypeToken, " const" )) {
21852192 mTokenList .addtoken (beforeTypeToken);
21862193 beforeTypeToken->deleteThis ();
0 commit comments