diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index d4217b232..f0d69caff 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -675,7 +675,7 @@ static bool iscpp11init_impl(const Token * const tok) return false; if (Token::simpleMatch(nameToken->previous(), ". void {") && nameToken->previous()->originalName() == "->") return false; // trailing return type. The only function body that can contain no semicolon is a void function. - if (Token::simpleMatch(nameToken->previous(), "namespace")) + if (Token::simpleMatch(nameToken->previous(), "namespace") || Token::simpleMatch(nameToken, "namespace") /*anonymous namespace*/) return false; if (endtok != nullptr && !Token::Match(nameToken, "return|:")) { // If there is semicolon between {..} this is not a initlist diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 165fbb288..dc0477197 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7483,6 +7483,13 @@ private: testIsCpp11init("class X{}", // forgotten ; so not properly recognized as a class "{ }", TokenImpl::Cpp11init::CPP11INIT); + + testIsCpp11init("namespace abc::def { TEST(a, b) {} }", + "{ TEST", + TokenImpl::Cpp11init::NOINIT); + testIsCpp11init("namespace { TEST(a, b) {} }", // anonymous namespace + "{ TEST", + TokenImpl::Cpp11init::NOINIT); #undef testIsCpp11init } };