From 2070431d8ca867acfb4391c275cd82caff4d711a Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 31 May 2015 19:57:26 +0300 Subject: [PATCH] C++: Fix resolving of partial specialization Use-case: struct b {}; template struct s { float f; }; template struct s { int i; }; void f() { s var; var.i; // i not highlighted } Task-number: QTCREATORBUG-14036 Change-Id: I70a87499e0a375e84d992ca0a79d77270a3419e8 Reviewed-by: Nikolai Kosjar --- src/libs/cplusplus/LookupContext.cpp | 3 +++ src/plugins/cpptools/cppcompletion_test.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 95001fbc310..dc96c304a59 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -1212,6 +1212,9 @@ LookupScopePrivate *LookupScopePrivate::findSpecialization( } } } + + if (specializationTemplateArgument == initializationTemplateArgument) + return cit->second; } } } diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index cc98254c760..82a58d4760f 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -2623,6 +2623,20 @@ void CppToolsPlugin::test_completion_data() ) << _("s.") << (QStringList() << QLatin1String("S")); + QTest::newRow("partial_specialization") << _( + "struct b {};\n" + "template struct s { float f; };\n" + "template struct s { int i; };\n" + "\n" + "void f()\n" + "{\n" + " s var;\n" + " @\n" + "}\n" + ) << _("var.") << (QStringList() + << QLatin1String("i") + << QLatin1String("s")); + QTest::newRow("auto_declaration_in_if_condition") << _( "struct Foo { int bar; };\n" "void fun() {\n"