diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 7e352db117da7fd7ae0fa5283357774f79bb33fc..21cecac3098ffd085c64cddd5ebfccfc10fb9950 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -376,9 +376,18 @@ void ClassOrNamespace::lookup_helper(const Name *name, ClassOrNamespace *binding if (binding && ! processed->contains(binding)) { processed->insert(binding); + const Identifier *nameId = name->identifier(); + foreach (Symbol *s, binding->symbols()) { - if (ScopedSymbol *scoped = s->asScopedSymbol()) + if (ScopedSymbol *scoped = s->asScopedSymbol()) { + if (Class *klass = scoped->asClass()) { + if (const Identifier *id = klass->identifier()) { + if (nameId && nameId->isEqualTo(id)) + result->append(klass); + } + } _factory->lookupInScope(name, scoped->members(), result, templateId); + } } foreach (Enum *e, binding->enums()) @@ -486,6 +495,13 @@ ClassOrNamespace *ClassOrNamespace::lookupType_helper(const Name *name, if (name->isNameId() || name->isTemplateNameId()) { flush(); + foreach (Symbol *s, symbols()) { + if (Class *klass = s->asClass()) { + if (klass->identifier() && klass->identifier()->isEqualTo(name->identifier())) + return this; + } + } + if (ClassOrNamespace *e = nestedType(name)) return e;