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 d4c650977cd..1bf8de416c6 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 @@ -3093,4 +3093,17 @@ public class AST2TemplateTests extends AST2BaseTest { ICPPTemplateTypeParameter tp= (ICPPTemplateTypeParameter) spec.getTemplateParameters()[0]; assertNull(tp.getDefault()); } + + // class X { + // template X(S s); + // }; + // + // void test(X a); + // void bla(int g) { + // test(new X(g)); + // } + public void testBug239586_ClassCast() throws Exception { + parseAndCheckBindings(getAboveComment(), ParserLanguage.CPP); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 0938bb8e680..16d2a79fd6c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -1707,8 +1707,7 @@ public class CPPVisitor { IBinding binding = name.resolveBinding(); if (binding instanceof ICPPConstructor) { try { - ICPPClassScope scope = (ICPPClassScope) binding.getScope(); - type = scope.getClassType(); + type= ((ICPPConstructor) binding).getClassOwner(); type = new CPPPointerType(type); } catch (DOMException e) { type = e.getProblem();