diff options
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index f8cdf106a0..aae1b25ff1 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -1082,9 +1082,9 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac const unsigned argumentCountOfSpecialization = templateSpecialization->templateParameterCount(); + Subst subst(_control.data()); if (_factory->expandTemplates()) { Clone cloner(_control.data()); - Subst subst(_control.data()); for (unsigned i = 0; i < argumentCountOfSpecialization; ++i) { const TypenameArgument *tParam = templateSpecialization->templateParameterAt(i)->asTypenameArgument(); @@ -1149,6 +1149,13 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac } } } + if (!baseBinding && subst.contains(baseName)) { + const FullySpecifiedType &fullType = subst[baseName]; + if (fullType.isValid()) { + if (NamedType *namedType = fullType.type()->asNamedType()) + baseBinding = lookupType(namedType->name()); + } + } } else { SubstitutionMap map; for (unsigned i = 0; |