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 85ff8210ddd..7db462451aa 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 @@ -713,6 +713,10 @@ public class CPPTemplates { IASTName templateName = id.getTemplateName(); IBinding template = templateName.resolvePreBinding(); + while (template instanceof CPPTypedefSpecialization) { + template = ((CPPTypedefSpecialization) template).getSpecializedBinding(); + } + // Alias template. if (template instanceof ICPPAliasTemplate) { ICPPAliasTemplate aliasTemplate = (ICPPAliasTemplate) template; diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java index 017b0021eec..ca392da5c0e 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java @@ -1506,6 +1506,25 @@ public class CompletionTests extends AbstractContentAssistTest { assertContentAssistResults(fCursorOffset, expected, true, ID); } + // template + // struct A { + // template + // struct AA { + // template + // using Type = TTT; + // }; + // }; + // + // struct B{ + // static int i; + // }; + // + // A<0>::AA<0>::Type::/*cursor*/ + public void testNestedTemplateSpecialization_460341() throws Exception { + final String[] expected = { "i" }; + assertContentAssistResults(fCursorOffset, expected, true, ID); + } + // void foo() { Specialization