forked from qt-creator/qt-creator
C++: add support for resolving typedefs for template arguments
Example:
template <typename T>
struct Base { T t; };
struct Foo { int foo; };
void fun() {
typedef Foo TypedefedFoo;
Base<TypedefedFoo> baseFoo;
baseFoo.t.// no code completion
}
Change-Id: I4822693d3fa1ee2e9b0e4cdd28bb9a8d441fb313
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
@@ -2328,6 +2328,34 @@ void CppToolsPlugin::test_completion_data()
|
||||
<< QLatin1String("foo")
|
||||
<< QLatin1String("Foo"));
|
||||
|
||||
QTest::newRow("resolving_template_argument1") << _(
|
||||
"template <typename T>\n"
|
||||
"struct Base { T t; };\n"
|
||||
"struct Foo { int foo; };\n"
|
||||
"void fun() {\n"
|
||||
" typedef Foo TypedefedFoo;\n"
|
||||
" Base<TypedefedFoo> baseFoo;\n"
|
||||
" @\n"
|
||||
"}\n"
|
||||
) << _("baseFoo.t.") << (QStringList()
|
||||
<< QLatin1String("foo")
|
||||
<< QLatin1String("Foo"));
|
||||
|
||||
QTest::newRow("resolving_template_argument2") << _(
|
||||
"namespace NS {\n"
|
||||
"template <typename T>\n"
|
||||
"struct Base { T t; };\n"
|
||||
"}\n"
|
||||
"struct Foo { int foo; };\n"
|
||||
"void fun() {\n"
|
||||
" typedef Foo TypedefedFoo;\n"
|
||||
" NS::Base<TypedefedFoo> baseFoo;\n"
|
||||
" @\n"
|
||||
"}\n"
|
||||
) << _("baseFoo.t.") << (QStringList()
|
||||
<< QLatin1String("foo")
|
||||
<< QLatin1String("Foo"));
|
||||
|
||||
// this is not a valid code(is not compile) but it caused a crash
|
||||
QTest::newRow("template_specialization_and_initialization_with_pointer2") << _(
|
||||
"template <typename T1, typename T2 = int>\n"
|
||||
|
||||
Reference in New Issue
Block a user