diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 6b09411f2..94e44608b 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -11080,6 +11080,11 @@ void Tokenizer::simplifyOperatorName() if (tok->str() != "operator") continue; // operator op + if (Token::Match(tok, "operator %op% (")) { + tok->str(tok->str() + tok->next()->str()); + tok->deleteNext(); + continue; + } std::string op; Token *par = tok->next(); bool done = false; diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 4787fb26e..d4f37ce90 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -412,6 +412,7 @@ private: TEST_CASE(simplifyOperatorName23); TEST_CASE(simplifyOperatorName24); TEST_CASE(simplifyOperatorName25); + TEST_CASE(simplifyOperatorName26); TEST_CASE(simplifyNullArray); @@ -6602,6 +6603,14 @@ private: tokenizeAndStringify(code)); } + void simplifyOperatorName26() { + const char code[] = "void foo() {" + " x = y.operator *().z[123];" + "}"; + ASSERT_EQUALS("void foo ( ) { x = y . operator* ( ) . z [ 123 ] ; }", + tokenizeAndStringify(code)); + } + void simplifyNullArray() { ASSERT_EQUALS("* ( foo . bar [ 5 ] ) = x ;", tokenizeAndStringify("0[foo.bar[5]] = x;")); }