summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2014-07-03 09:00:00 +0200
committerOrgad Shaneh <orgads@gmail.com>2014-07-07 13:26:14 +0200
commit4aa4e64b77bf867fb80ed26e21112e15c734a130 (patch)
tree330702d449a4f1b40fc09ed79b2927d6a62961be /src/libs/cplusplus/LookupContext.cpp
parent87dcde55641ddf057ad92afb78808408c57ae1c7 (diff)
downloadqt-creator-4aa4e64b77bf867fb80ed26e21112e15c734a130.tar.gz
C++: base class and default argument for template class
Fix code completion in case: struct Foo { int bar; }; template <typename T1 = Foo> struct Derived : T1 { }; int main() { Derived<> foo; foo. // members from Foo are not proposed return 0; } Task-number: QTCREATORBUG-12605 Change-Id: Ibe35c7b9a161e789057a4518c72390ac52489a3e Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
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;