@@ -492,7 +492,10 @@ std::list<TemplateSimplifier::TokenAndName> TemplateSimplifier::getTemplateDecla
492492 std::list<ScopeInfo2> scopeInfo;
493493 std::list<TokenAndName> declarations;
494494 for (Token *tok = tokens; tok; tok = tok->next ()) {
495- setScopeInfo (tok, &scopeInfo);
495+ if (Token::Match (tok, " }|namespace|class|struct" )) {
496+ setScopeInfo (tok, &scopeInfo);
497+ continue ;
498+ }
496499 if (!Token::simpleMatch (tok, " template <" ))
497500 continue ;
498501 // Some syntax checks, see #6865
@@ -530,7 +533,10 @@ std::list<TemplateSimplifier::TokenAndName> TemplateSimplifier::getTemplateInsta
530533 std::list<ScopeInfo2> scopeList;
531534
532535 for (Token *tok = tokens; tok; tok = tok->next ()) {
533- setScopeInfo (tok, &scopeList);
536+ if (Token::Match (tok, " }|namespace|class|struct" )) {
537+ setScopeInfo (tok, &scopeList);
538+ continue ;
539+ }
534540 // template definition.. skip it
535541 if (Token::simpleMatch (tok, " template <" )) {
536542 tok = tok->next ()->findClosingBracket ();
@@ -949,7 +955,10 @@ void TemplateSimplifier::expandTemplate(
949955 const Token *endOfTemplateDefinition = nullptr ;
950956 const Token * const templateDeclarationNameToken = templateDeclarationToken->tokAt (getTemplateNamePosition (templateDeclarationToken));
951957 for (const Token *tok3 = tokenlist.front (); tok3; tok3 = tok3 ? tok3->next () : nullptr ) {
952- setScopeInfo (const_cast <Token *>(tok3), &scopeInfo);
958+ if (Token::Match (tok3, " }|namespace|class|struct" )) {
959+ setScopeInfo (tok3, &scopeInfo);
960+ continue ;
961+ }
953962 if (inTemplateDefinition) {
954963 if (!endOfTemplateDefinition && tok3->str () == " {" )
955964 endOfTemplateDefinition = tok3->link ();
@@ -1640,7 +1649,10 @@ void TemplateSimplifier::replaceTemplateUsage(Token * const instantiationToken,
16401649 std::list<ScopeInfo2> scopeInfo;
16411650 std::list< std::pair<Token *, Token *> > removeTokens;
16421651 for (Token *nameTok = instantiationToken; nameTok; nameTok = nameTok->next ()) {
1643- setScopeInfo (nameTok, &scopeInfo);
1652+ if (Token::Match (nameTok, " }|namespace|class|struct" )) {
1653+ setScopeInfo (nameTok, &scopeInfo);
1654+ continue ;
1655+ }
16441656 if (!Token::Match (nameTok, " %name% <" ))
16451657 continue ;
16461658 if (!matchTemplateParameters (nameTok, typeStringsUsedInTemplateInstantiation))
0 commit comments