From 209078e57e97cd45c213c58a21df02c9a1ad89c8 Mon Sep 17 00:00:00 2001 From: Przemyslaw Gorszkowski Date: Fri, 6 Feb 2015 12:16:08 +0100 Subject: C++: fix dereferencing of nested type and operator '*' Fixed case: template struct List { struct iterator { T &operator*() { return t; } T t; }; iterator begin() { return iterator(); } }; struct Foo { int bar; }; void func() { List list; (*list.begin()).; // code completion doesn't work } Task-number: QTCREATORBUG-13799 Change-Id: Ia3f5c1631c2f6a25d7fb1186b4ef506354ed22be Reviewed-by: Orgad Shaneh Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/cppcompletion_test.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/plugins/cpptools/cppcompletion_test.cpp') diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index dd5bbe2ecd..f51cdb0d3a 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -2513,6 +2513,26 @@ void CppToolsPlugin::test_completion_data() ) << _("s->") << (QStringList() << QLatin1String("Foo") << QLatin1String("bar")); + + QTest::newRow("dereference_of_nested_type_opertor_*") << _( + "template\n" + "struct QList\n" + "{\n" + " struct iterator\n" + " {\n" + " T &operator*() { return t; }\n" + " T t;\n" + " };\n" + " iterator begin() { return iterator(); }\n" + "};\n" + "struct Foo { int bar; };\n" + "void fun() {\n" + " QList list;\n" + " @\n" + "}\n" + ) << _("(*list.begin()).") << (QStringList() + << QLatin1String("Foo") + << QLatin1String("bar")); } void CppToolsPlugin::test_completion_member_access_operator() -- cgit v1.2.1