summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcompletion_test.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2015-06-20 22:37:53 +0300
committerOrgad Shaneh <orgads@gmail.com>2015-06-29 09:22:08 +0000
commita77e32800c2bdfdccfcd6dfcacc48d3fa610daea (patch)
tree5bb11546c910ce312b660abc328cac3f364b69b7 /src/plugins/cpptools/cppcompletion_test.cpp
parent70bc5e842c8ec11f17a8bcde4615eedb0a5cccaa (diff)
downloadqt-creator-a77e32800c2bdfdccfcd6dfcacc48d3fa610daea.tar.gz
C++: Ignore explicit template instantiations
Defined in section 14.7.2 of the standard. Fixes completion for std::string. The following explicit instantiation appears in bits/basic_string.tcc: extern template class basic_string<char>; This is wrongfully considered a specialization for a forward declaration (like `template<> class basic_string<char>` is). Introduce a new Symbol type for explicit instantiations. Use-case: template<class T> struct Foo { T bar; }; template class Foo<int>; void func() { Foo<int> foo; foo.bar; // bar not highlighted } Change-Id: I9e35c8c32f6b78fc87b4f4f1fc903b42cfbd2c2b 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.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index 2bbeb4f294..b4140d9065 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -796,6 +796,21 @@ void CppToolsPlugin::test_completion_data()
<< QLatin1String("Data")
<< QLatin1String("dataMember"));
+ QTest::newRow("explicit_instantiation") << _(
+ "template<class T>\n"
+ "struct Foo { T bar; };\n"
+ "\n"
+ "template class Foo<int>;\n"
+ "\n"
+ "void func()\n"
+ "{\n"
+ " Foo<int> foo;\n"
+ " @\n"
+ "}\n"
+ ) << _("foo.") << (QStringList()
+ << QLatin1String("Foo")
+ << QLatin1String("bar"));
+
QTest::newRow("use_global_identifier_as_base_class: derived as global and base as global") << _(
"struct Global\n"
"{\n"