@@ -8708,7 +8708,8 @@ void Tokenizer::findGarbageCode() const
87088708 syntaxError (tok);
87098709 if (Token::Match (tok, " typedef [,;:]" ))
87108710 syntaxError (tok);
8711- if (Token::Match (tok, " ! %comp%" ))
8711+ if (Token::Match (tok, " !|~ %comp%" ) &&
8712+ !(isCPP () && tok->strAt (1 ) == " >" && Token::simpleMatch (tok->tokAt (-1 ), " operator" )))
87128713 syntaxError (tok);
87138714 if (Token::Match (tok, " ] %name%" ) && (!isCPP () || !(tok->tokAt (-1 ) && Token::simpleMatch (tok->tokAt (-2 ), " delete [" )))) {
87148715 if (tok->next ()->isUpperCaseName ())
@@ -8784,24 +8785,25 @@ void Tokenizer::findGarbageCode() const
87848785 for (const Token *tok = tokens (); tok; tok = tok->next ()) {
87858786 if (Token::simpleMatch (tok, " < >" ) && !(Token::Match (tok->tokAt (-1 ), " %name%" ) || (tok->tokAt (-1 ) && Token::Match (tok->tokAt (-2 ), " operator %op%" ))))
87868787 syntaxError (tok);
8788+ if (Token::simpleMatch (tok, " : template" ) && !Token::Match (tok->tokAt (-1 ), " public|private|protected" ))
8789+ syntaxError (tok);
87878790 if (!Token::simpleMatch (tok, " template <" ))
87888791 continue ;
87898792 if (!tok->tokAt (2 ) || tok->tokAt (2 )->isLiteral ())
87908793 syntaxError (tok);
8791- if (tok->previous () && !Token::Match (tok->previous (), " :|;|{|}|)|>|\" C++\" " )) {
8794+ if (tok->previous () && !Token::Match (tok->previous (), " :|,| ;|{|}|)|< |>|\" C++\" " )) {
87928795 if (tok->previous ()->isUpperCaseName ())
87938796 unknownMacroError (tok->previous ());
87948797 else
87958798 syntaxError (tok);
87968799 }
8797- const Token * const tok1 = tok;
8798- tok = tok->next ()->findClosingBracket ();
8799- if (!tok)
8800- syntaxError (tok1);
8801- if (!Token::Match (tok, " >|>> ::|...| %name%" ) &&
8802- !Token::Match (tok, " >|>> [ [ %name%" ) &&
8803- !Token::Match (tok, " > >|*" ))
8804- syntaxError (tok->next () ? tok->next () : tok1);
8800+ const Token * const tok1 = tok->next ()->findClosingBracket ();
8801+ if (!tok1)
8802+ syntaxError (tok);
8803+ if (!Token::Match (tok1, " >|>> ::|...| %name%" ) &&
8804+ !Token::Match (tok1, " >|>> [ [ %name%" ) &&
8805+ !Token::Match (tok1, " > >|*" ))
8806+ syntaxError (tok1->next () ? tok1->next () : tok);
88058807 }
88068808 }
88078809
0 commit comments