diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index d686e14fd91ec0ffba82bc0b451dffd25a348ec2..a00b45263b4ad60eddb7e0dd09df41f0507d2d9a 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -136,9 +136,19 @@ QList<Symbol *> LookupContext::resolveQualifiedNameId(QualifiedNameId *q,
     else
         scopes = resolveNestedNameSpecifier(q, visibleScopes);
 
-    // ### expand the scopes.
+    QList<Scope *> expanded;
+    foreach (Scope *scope, scopes) {
+        expanded.append(scope);
+
+        for (unsigned i = 0; i < scope->symbolCount(); ++i) {
+            Symbol *member = scope->symbolAt(i);
+
+            if (ScopedSymbol *scopedSymbol = member->asScopedSymbol())
+                expandEnumOrAnonymousSymbol(scopedSymbol, &expanded);
+        }
+    }
 
-    return resolve(q->unqualifiedNameId(), scopes, mode);
+    return resolve(q->unqualifiedNameId(), expanded, mode);
 }
 
 QList<Symbol *> LookupContext::resolveOperatorNameId(OperatorNameId *opId,
@@ -301,6 +311,31 @@ QList<Scope *> LookupContext::visibleScopes(const QPair<FullySpecifiedType, Symb
     return scopes;
 }
 
+void LookupContext::expandEnumOrAnonymousSymbol(ScopedSymbol *scopedSymbol,
+                                                QList<Scope *> *expandedScopes) const
+{
+    if (! scopedSymbol || expandedScopes->contains(scopedSymbol->members()))
+        return;
+
+    Scope *members = scopedSymbol->members();
+
+    if (scopedSymbol->isEnum())
+        expandedScopes->append(members);
+    else if (! scopedSymbol->name() && (scopedSymbol->isClass() || scopedSymbol->isNamespace())) {
+        // anonymous class or namespace
+
+        expandedScopes->append(members);
+
+        for (unsigned i = 0; i < members->symbolCount(); ++i) {
+            Symbol *member = members->symbolAt(i);
+
+            if (ScopedSymbol *nested = member->asScopedSymbol()) {
+                expandEnumOrAnonymousSymbol(nested, expandedScopes);
+            }
+        }
+    }
+}
+
 QList<Scope *> LookupContext::expand(const QList<Scope *> &scopes) const
 {
     QList<Scope *> expanded;
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index 0fb7371e5eb7bb27e80638b146d594d64f934872..568725da56d52cf14453fe9aec0a4212122ba199 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -114,6 +114,9 @@ public:
                         const QList<Scope *> &visibleScopes,
                         QList<Scope *> *expandedScopes) const;
 
+    void expandEnumOrAnonymousSymbol(ScopedSymbol *scopedSymbol,
+                                     QList<Scope *> *expandedScopes) const;
+
 private:
     QList<Symbol *> resolveQualifiedNameId(QualifiedNameId *q,
                                            const QList<Scope *> &visibleScopes,