diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 96c69bb4dd9..57f04b5f6e9 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -110,7 +110,7 @@ static bool isClassStructUnionEnumStart(const Token * tok) const Token * tok2 = tok->previous(); while (tok2 && !Token::Match(tok2, "class|struct|union|enum|{|}|)|;|>|>>")) tok2 = tok2->previous(); - return Token::Match(tok2, "class|struct|union|enum"); + return Token::Match(tok2, "class|struct|union|enum") && !Token::simpleMatch(tok2->tokAt(-1), "->"); } //--------------------------------------------------------------------------- diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index dcbbd0201af..e58be1c0d87 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7683,6 +7683,12 @@ class TestTokenizer : public TestFixture { ASSERT_NO_THROW(tokenizeAndStringify("struct S { unsigned u:2, :30; };")); // #14393 + ASSERT_NO_THROW(tokenizeAndStringify("struct S {};\n" // #14400 + "auto f(bool b) -> struct S {\n" + " if (b) {}\n" + " return {};\n" + "};\n")); + ignore_errout(); }