diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp
index 1f968d275332ca62ea10e5ab4aee0f69f768a380..6d8a2e3905dcefd69954162d4e1610cdc5f6fded 100644
--- a/src/plugins/cppeditor/cppchecksymbols.cpp
+++ b/src/plugins/cppeditor/cppchecksymbols.cpp
@@ -480,6 +480,23 @@ bool CheckSymbols::visit(NamedTypeSpecifierAST *)
     return true;
 }
 
+bool CheckSymbols::visit(ElaboratedTypeSpecifierAST *ast)
+{
+    accept(ast->attribute_list);
+
+    if (ast->name) {
+        if (const Name *name = ast->name->name) {
+            if (name->isNameId() || name->isTemplateNameId()) {
+                addUse(ast->name, Use::Type);
+                return false;
+            }
+        }
+    }
+
+    accept(ast->name);
+    return false;
+}
+
 bool CheckSymbols::visit(MemberAccessAST *ast)
 {
     accept(ast->base_expression);
diff --git a/src/plugins/cppeditor/cppchecksymbols.h b/src/plugins/cppeditor/cppchecksymbols.h
index 848b18365ad3a86a971d598507104321e9d67a84..83e3f5ed52fb9e0be931c70c34ec22bc6022d2b0 100644
--- a/src/plugins/cppeditor/cppchecksymbols.h
+++ b/src/plugins/cppeditor/cppchecksymbols.h
@@ -130,6 +130,7 @@ protected:
     virtual bool visit(UsingDirectiveAST *);
     virtual bool visit(SimpleDeclarationAST *);
     virtual bool visit(NamedTypeSpecifierAST *);
+    virtual bool visit(ElaboratedTypeSpecifierAST *ast);
 
     virtual bool visit(EnumeratorAST *);