diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index d4755fc1260..ed72d1bb2c8 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3343,9 +3343,12 @@ bool Tokenizer::simplifyUsing() // function pointer TokenList::copyTokens(tok1->next(), fpArgList, usingEnd->previous()); Token* const copyEnd = TokenList::copyTokens(tok1, start, fpQual->link()->previous()); - tok1->deleteThis(); + Token* leftPar = copyEnd->previous(); + while (leftPar->str() != "(") + leftPar = leftPar->previous(); Token* const rightPar = copyEnd->next()->insertToken(")"); - Token::createMutualLinks(tok1->next(), rightPar); + Token::createMutualLinks(leftPar, rightPar); + tok1->deleteThis(); substitute = true; } else if (fpArgList && !fpQual && Token::Match(tok1->next(), "* const| %name%")) { // function pointer diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index c73e4c3ac1d..c020b99b5dd 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -898,6 +898,14 @@ class TestSimplifyUsing : public TestFixture { const char expected2[] = "int ( * fp1 ) ( int ) ; int ( * const fp2 ) ( int ) ;"; ASSERT_EQUALS(expected2, tok(code2)); ASSERT_EQUALS("", errout_str()); + + const char code3[] = "using FP = std::string (*)();\n" + "using FPC = std::string (*const)();\n" + "FP fp;\n" + "FPC fpc{};\n"; + const char expected3[] = "std :: string ( * fp ) ( ) ; std :: string ( * const fpc ) ( ) { } ;"; + ASSERT_EQUALS(expected3, tok(code3)); + ASSERT_EQUALS("", errout_str()); } void simplifyUsing8970() {