diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 2a4425ad5..75920d53a 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -123,7 +123,12 @@ void SymbolDatabase::createSymbolDatabaseFindAllScopes() continue; else if (Token::Match(tok2, "%name% [")) continue; - else + // skip template + else if (Token::simpleMatch(tok->previous(), "template class") && + Token::simpleMatch(tok2->previous(), "> ;")) { + tok = tok2; + continue; + } else throw InternalError(tok2, "SymbolDatabase bailout; unhandled code", InternalError::SYNTAX); continue; } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 4a961d306..ab7dee342 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -274,6 +274,7 @@ private: TEST_CASE(symboldatabase60); TEST_CASE(symboldatabase61); TEST_CASE(symboldatabase62); + TEST_CASE(symboldatabase63); TEST_CASE(enum1); TEST_CASE(enum2); @@ -2928,6 +2929,12 @@ private: ASSERT(db && db->scopeList.size() == 5); } + void symboldatabase63() { + GET_SYMBOL_DB("template class T ; void foo() { }"); + ASSERT(db != nullptr); + ASSERT(db && db->scopeList.size() == 2); + } + void enum1() { GET_SYMBOL_DB("enum BOOL { FALSE, TRUE }; enum BOOL b;");