diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp index 613186375a7..10385e67238 100644 --- a/src/plugins/cppeditor/cppchecksymbols.cpp +++ b/src/plugins/cppeditor/cppchecksymbols.cpp @@ -845,6 +845,19 @@ void CheckSymbols::addType(ClassOrNamespace *b, NameAST *ast) //qDebug() << "added use" << oo(ast->name) << line << column << length; } +bool CheckSymbols::isTemplateClass(Symbol *symbol) const +{ + if (symbol) { + if (Template *templ = symbol->asTemplate()) { + if (Symbol *declaration = templ->declaration()) { + if (declaration->isClass()) + return true; + } + } + } + return false; +} + void CheckSymbols::addTypeOrStatic(const QList &candidates, NameAST *ast) { unsigned startToken = ast->firstToken(); @@ -862,7 +875,7 @@ void CheckSymbols::addTypeOrStatic(const QList &candidates, NameAST else if (c->isUsingNamespaceDirective()) // ... and using namespace directives. continue; else if (c->isTypedef() || c->isNamespace() || - c->isClass() || c->isEnum() || c->isTemplate() || + c->isClass() || c->isEnum() || isTemplateClass(c) || c->isForwardClassDeclaration() || c->isTypenameArgument() || c->enclosingEnum() != 0) { unsigned line, column; diff --git a/src/plugins/cppeditor/cppchecksymbols.h b/src/plugins/cppeditor/cppchecksymbols.h index e07a7e6631f..848b18365ad 100644 --- a/src/plugins/cppeditor/cppchecksymbols.h +++ b/src/plugins/cppeditor/cppchecksymbols.h @@ -117,6 +117,8 @@ protected: void addClassMember(const QList &candidates, NameAST *ast); void addVirtualMethod(const QList &candidates, NameAST *ast, unsigned argumentCount); + bool isTemplateClass(Symbol *s) const; + Scope *enclosingScope() const; FunctionDefinitionAST *enclosingFunctionDefinition() const; TemplateDeclarationAST *enclosingTemplateDeclaration() const;