summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp9
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;