diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 2465f121e..6b1276c04 100755 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -8420,7 +8420,7 @@ const Token * Tokenizer::findGarbageCode() const for (const Token *tok = tokens(); tok; tok = tok->next()) { if (!Token::simpleMatch(tok, "template <")) continue; - if (tok->previous() && !Token::Match(tok->previous(), "[:;{})]")) + if (tok->previous() && !Token::Match(tok->previous(), "[:;{})>]")) return tok; const Token * const tok1 = tok; tok = tok->next()->findClosingBracket(); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 24852f69d..43a94f4b5 100755 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -220,6 +220,7 @@ private: TEST_CASE(simplifyFunctionParameters1); // #3721 TEST_CASE(simplifyFunctionParameters2); // #4430 TEST_CASE(simplifyFunctionParameters3); // #4436 + TEST_CASE(simplifyFunctionParametersMultiTemplate); TEST_CASE(simplifyFunctionParametersErrors); TEST_CASE(removeParentheses1); // Ticket #61 @@ -3116,6 +3117,12 @@ private: ASSERT_EQUALS(code, tokenizeAndStringify(code)); } + void simplifyFunctionParametersMultiTemplate() { + const char code[] = "template < typename T1 > template < typename T2 > " + "void A < T1 > :: foo ( T2 ) { }"; + ASSERT_EQUALS(code, tokenizeAndStringify(code)); + } + void simplifyFunctionParametersErrors() { //same parameters... ASSERT_THROW(tokenizeAndStringify("void foo(x, x)\n"