diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2014-07-03 09:00:00 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2014-07-07 13:26:14 +0200 |
commit | 4aa4e64b77bf867fb80ed26e21112e15c734a130 (patch) | |
tree | 330702d449a4f1b40fc09ed79b2927d6a62961be /src/libs/cplusplus/LookupContext.cpp | |
parent | 87dcde55641ddf057ad92afb78808408c57ae1c7 (diff) | |
download | qt-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.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; |