diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index 86b1aafa0a9..304299688ec 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java @@ -2383,4 +2383,24 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa public void testAmbiguousBaseClassLookup_413406() throws Exception { getProblemFromASTName("eof();", 3); } + + // template + // struct S; + + // #include "header.h" + // template <> + // struct S { + // typedef int type; + // }; + // + // template + // struct S { + // typedef char type; + // }; + // + // typedef S<>::type T; + public void testExplicitSpecializationOfTemplateDeclaredInHeader_401820() throws Exception { + IType T = getBindingFromASTName("T", 1); + assertEquals("int", ASTTypeUtil.getType(T)); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java index 79f92c900bf..9aea40da2e9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java @@ -114,8 +114,11 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC final ICPPClassTemplate ib = getIndexBinding(); if (ib instanceof ICPPInstanceCache) { ICPPTemplateInstance cand= ((ICPPInstanceCache) ib).getInstance(arguments); - if (cand instanceof IIndexBinding && - getTemplateName().getTranslationUnit().getIndexFileSet().containsDeclaration((IIndexBinding) cand)) { + if (cand instanceof IIndexBinding) { + if (getTemplateName().getTranslationUnit().getIndexFileSet().containsDeclaration((IIndexBinding) cand)) { + return cand; + } + } else { return cand; } }