diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 34fc0218c47..549fb0d78cf 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -5292,4 +5292,26 @@ public class AST2TemplateTests extends AST2BaseTest { public void testFunctionWithVoidParamInTypeDeduction() throws Exception { parseAndCheckBindings(); } + + // template struct Templ { + // Templ(){} + // }; + // + // template<> struct Templ { + // Templ(){} + // int e; + // }; + // + // template struct Templ { + // Templ(){} + // }; + // + // int main() { + // Templ iFive; + // iFive.e= 0; + // return 0; + // } + public void testPartialSpecAfterExplicitInst_339475() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 282f9e2539b..a8c9c6cb1b7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -220,6 +220,10 @@ public class CPPTemplates { map.put(param, pack); } + ICPPTemplateInstance prim= getInstance(template, arguments, isDef); + if (prim != null && prim.isExplicitSpecialization()) + return prim; + IBinding result= CPPTemplates.selectSpecialization(template, arguments, isDef); if (result != null) return result;