diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index b0256caaad0..b77119193bc 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -390,7 +390,7 @@ void SymbolDatabase::createSymbolDatabaseFindAllScopes() } // using type alias - else if (mTokenizer.isCPP() && tok->isKeyword() && Token::Match(tok, "using %name% =")) { + else if (mTokenizer.isCPP() && tok->isKeyword() && Token::Match(tok, "using %name% =") && !tok->tokAt(2)->isSimplifiedTypedef()) { if (tok->strAt(-1) != ">" && !findType(tok->next(), scope)) { // fill typeList.. typeList.emplace_back(tok, nullptr, scope); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 4bdf44796df..68fd0d0a227 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -421,6 +421,7 @@ class TestSymbolDatabase : public TestFixture { TEST_CASE(symboldatabase102); TEST_CASE(symboldatabase103); TEST_CASE(symboldatabase104); + TEST_CASE(symboldatabase105); TEST_CASE(createSymbolDatabaseFindAllScopes1); TEST_CASE(createSymbolDatabaseFindAllScopes2); @@ -5551,6 +5552,24 @@ class TestSymbolDatabase : public TestFixture { } } + void symboldatabase105() { + { + GET_SYMBOL_DB_DBG("template \n" + "struct S : public std::deque {\n" + " using std::deque::clear;\n" + " void f();\n" + "};\n" + "template \n" + "void S::f() {\n" + " clear();\n" + "}\n"); + ASSERT(db != nullptr); + ASSERT_EQUALS("", errout.str()); + const Token* const c = Token::findsimplematch(tokenizer.tokens(), "clear ("); + ASSERT(!c->type()); + } + } + void createSymbolDatabaseFindAllScopes1() { GET_SYMBOL_DB("void f() { union {int x; char *p;} a={0}; }"); ASSERT(db->scopeList.size() == 3);