aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/Matcher.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/libs/3rdparty/cplusplus/Matcher.cpp
parent70bc5e842c8ec11f17a8bcde4615eedb0a5cccaa (diff)
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/libs/3rdparty/cplusplus/Matcher.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Matcher.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Matcher.cpp b/src/libs/3rdparty/cplusplus/Matcher.cpp
index 7a3c21cafc..379ed59586 100644
--- a/src/libs/3rdparty/cplusplus/Matcher.cpp
+++ b/src/libs/3rdparty/cplusplus/Matcher.cpp
@@ -218,6 +218,17 @@ bool Matcher::match(const Template *type, const Template *otherType)
return true;
}
+bool Matcher::match(const ExplicitInstantiation *type, const ExplicitInstantiation *otherType)
+{
+ if (type == otherType)
+ return true;
+
+ if (! Matcher::match(type->name(), otherType->name(), this))
+ return false;
+
+ return true;
+}
+
bool Matcher::match(const ForwardClassDeclaration *type, const ForwardClassDeclaration *otherType)
{
if (type == otherType)