diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index e5f0ec8cf..d4ed68218 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -388,14 +388,18 @@ static Token * findCppTypeInitPar(Token *tok) { if (!tok || !Token::Match(tok->previous(), "[,()] %name%")) return nullptr; + bool istype = false; while (Token::Match(tok, "%name%|::|<")) { if (tok->str() == "<") { tok = tok->link(); if (!tok) return nullptr; } + istype |= tok->isStandardType(); tok = tok->next(); } + if (!istype) + return nullptr; if (!Token::Match(tok, "[*&]")) return nullptr; while (Token::Match(tok, "[*&]")) diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 566824d2a..78e1810ca 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8039,6 +8039,7 @@ private: ASSERT_EQUALS("fint(0,(", testAst("f(int(),0);")); ASSERT_EQUALS("f(0,(", testAst("f(int *(),0);")); // typedef int* X; f(X(),0); ASSERT_EQUALS("f((0,(", testAst("f((intp)int *(),0);")); + ASSERT_EQUALS("zx1(&y2(&|=", testAst("z = (x & (unsigned)1) | (y & (unsigned)2);")); // not type() // for ASSERT_EQUALS("for;;(", testAst("for(;;)"));