diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2015-02-06 12:33:56 +0100 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2015-02-26 10:09:39 +0000 |
commit | 8c11485edba3718925624612f2336d7853da297f (patch) | |
tree | 526fc74288c6b5670af94b4a982160444977690c /src/plugins/cpptools/cppcompletion_test.cpp | |
parent | 7f001dab1b9dd05160e78adb0554ad3478ba363c (diff) | |
download | qt-creator-8c11485edba3718925624612f2336d7853da297f.tar.gz |
C++: fix dereferencing of nested type and 'auto'
Fixed case:
template<class T>
struct List
{
struct iterator
{
T *operator->() { return &t; }
T &operator*() { return t; }
T t;
};
iterator begin() { return iterator(); }
};
struct Foo { int bar; };
void func()
{
List<Foo> list;
auto a = list.begin();
(*a).; // code completion doesn't work
a->; // code completion does not work
}
Task-number: QTCREATORBUG-13799
Change-Id: I38e4bfb2f5d728c0b24b0f18b3d78793e90d633b
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/cppcompletion_test.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcompletion_test.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 33c84f8df4..bf6bfb4679 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -2553,6 +2553,48 @@ void CppToolsPlugin::test_completion_data() ) << _("list.begin()->") << (QStringList() << QLatin1String("Foo") << QLatin1String("bar")); + + QTest::newRow("dereference_of_nested_type_opertor_*_and_auto") << _( + "template<typename T>\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<Foo> list;\n" + " auto a = list.begin();\n" + " @\n" + "}\n" + ) << _("(*a).") << (QStringList() + << QLatin1String("Foo") + << QLatin1String("bar")); + + QTest::newRow("dereference_of_nested_type_opertor_->_and_auto") << _( + "template<typename T>\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<Foo> list;\n" + " auto a = list.begin();\n" + " @\n" + "}\n" + ) << _("a->") << (QStringList() + << QLatin1String("Foo") + << QLatin1String("bar")); } void CppToolsPlugin::test_completion_member_access_operator() |