Commit 059cfde6 authored by Przemyslaw Gorszkowski's avatar Przemyslaw Gorszkowski Committed by Erik Verbruggen

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: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent ce4dc86d
......@@ -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);
......
......@@ -2281,6 +2281,20 @@ void CppToolsPlugin::test_completion_data()
<< QLatin1String("Derived")
<< QLatin1String("foo")
<< QLatin1String("Foo"));
QTest::newRow("default_arguments_for_class_templates_and_template_base_class_QTCREATORBUG-12606") << _(
"struct Foo { int foo; };\n"
"template <typename T>\n"
"struct Base { T t; };\n"
"template <typename T = Foo>\n"
"struct Derived : Base<T> {};\n"
"void fun() {\n"
" Derived<> derived;\n"
" @\n"
"}\n"
) << _("derived.t.") << (QStringList()
<< QLatin1String("foo")
<< QLatin1String("Foo"));
}
void CppToolsPlugin::test_completion_member_access_operator()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment