summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcompletion_test.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2015-05-22 13:03:55 +0300
committerOrgad Shaneh <orgads@gmail.com>2015-06-02 08:37:02 +0000
commitb67ebf9ffce6bbba7952b36120f49d7abf956e66 (patch)
treeae69c21e24bd439ee0e7630545952ec3c01f8685 /src/plugins/cpptools/cppcompletion_test.cpp
parent2a966a89177612c42574c6700d878fe864df4d76 (diff)
downloadqt-creator-b67ebf9ffce6bbba7952b36120f49d7abf956e66.tar.gz
C++: Fix lookup for instantiation of using
Yet another std::vector issue... Use-cases: // Case 1 template<typename T> using type = T; // Case 2 struct Parent { template<typename T> using type = T; }; // Case 3 template<typename T> struct ParentT { template<typename DT> using type = DT; }; struct Foo { int bar; }; void func() { type<Foo> p1; Parent::type<Foo> p2; ParentT<Foo>::type<Foo> p3; // bar not highlighted p1.bar; p2.bar; p3.bar; } Task-number: QTCREATORBUG-14480 Change-Id: I9ab08ea7360a432c48eb4b85aa0d63e08d2464c1 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.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index 00b796f0a8..cc98254c76 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -2917,6 +2917,87 @@ void CppToolsPlugin::test_completion_data()
<< QLatin1String("Foo")
<< QLatin1String("bar"));
+ QTest::newRow("template_using_instantiation") << _(
+ "template<typename _Tp>\n"
+ "using T = _Tp;\n"
+ "\n"
+ "struct Foo { int bar; };\n"
+ "\n"
+ "void func()\n"
+ "{\n"
+ " T<Foo> p;\n"
+ " @\n"
+ "}\n"
+ ) << _("p.") << (QStringList()
+ << QLatin1String("Foo")
+ << QLatin1String("bar"));
+
+ QTest::newRow("nested_template_using_instantiation") << _(
+ "struct Parent {\n"
+ " template<typename _Tp>\n"
+ " using T = _Tp;\n"
+ "};\n"
+ "\n"
+ "struct Foo { int bar; };\n"
+ "\n"
+ "void func()\n"
+ "{\n"
+ " Parent::T<Foo> p;\n"
+ " @;\n"
+ "}\n"
+ ) << _("p.") << (QStringList()
+ << QLatin1String("Foo")
+ << QLatin1String("bar"));
+
+ QTest::newRow("nested_template_using_instantiation_in_template_class") << _(
+ "template<typename ParentT>\n"
+ "struct Parent {\n"
+ " template<typename _Tp>\n"
+ " using T = _Tp;\n"
+ "};\n"
+ "\n"
+ "struct Foo { int bar; };\n"
+ "\n"
+ "void func()\n"
+ "{\n"
+ " Parent<Foo>::T<Foo> p;\n"
+ " @;\n"
+ "}\n"
+ ) << _("p.") << (QStringList()
+ << QLatin1String("Foo")
+ << QLatin1String("bar"));
+
+ QTest::newRow("recursive_nested_template_using_instantiation") << _(
+ "struct Foo { int bar; };\n"
+ "\n"
+ "struct A { typedef Foo value_type; };\n"
+ "\n"
+ "template<typename T>\n"
+ "struct Traits\n"
+ "{\n"
+ " typedef Foo value_type;\n"
+ "\n"
+ " template<typename _Tp>\n"
+ " using U = T;\n"
+ "};\n"
+ "\n"
+ "template<typename T>\n"
+ "struct Temp\n"
+ "{\n"
+ " typedef Traits<T> TraitsT;\n"
+ " typedef typename T::value_type value_type;\n"
+ " typedef typename TraitsT::template U<Foo> rebind;\n"
+ "};\n"
+ "\n"
+ "void func()\n"
+ "{\n"
+ " typename Temp<typename Temp<A>::rebind>::value_type p;\n"
+ " @\n"
+ "}\n"
+ ) << _("p.") << (QStringList()
+ << QLatin1String("Foo")
+ << QLatin1String("bar"));
+
QTest::newRow("qualified_name_in_nested_type") << _(
"template<typename _Tp>\n"
"struct Temp {\n"