C++: template base class and default argument for template class

Fix code completion for case:
struct Foo
{
    int bar;
};

template <typename T>
struct Base
{
    T t;
};

template <typename T1 = Foo>
struct Derived : Base<T1>
{};

int main()
{
    Derived<> foo;
    foo.t.// no code completion
    return 0;
}

Task-number: QTCREATORBUG-12606
Change-Id: Iadf2fae172739d0a5844c6b437fd2686616e64e7
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
Przemyslaw Gorszkowski
2014-07-03 13:53:22 +02:00
committed by Erik Verbruggen
parent ce4dc86d58
commit 059cfde677
2 changed files with 21 additions and 5 deletions

View File

@@ -1158,11 +1158,13 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
}
} else {
SubstitutionMap map;
for (unsigned i = 0;
i < argumentCountOfSpecialization && i < argumentCountOfInitialization;
++i) {
map.bind(templateSpecialization->templateParameterAt(i)->name(),
templId->templateArgumentAt(i));
for (unsigned i = 0; i < argumentCountOfSpecialization; ++i) {
const Name *name = templateSpecialization->templateParameterAt(i)->name();
FullySpecifiedType ty = (i < argumentCountOfInitialization) ?
templId->templateArgumentAt(i):
templateSpecialization->templateParameterAt(i)->type();
map.bind(name, ty);
}
SubstitutionEnvironment env;
env.enter(&map);