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 30fda240df4..a9404b9f3c7 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 @@ -2542,6 +2542,25 @@ public class AST2TemplateTests extends AST2BaseTest { ICPPFunction fn= bh.assertNonProblem("foo(cx", 3, ICPPFunction.class); } + // class A; + // + // int foo(A a); + // + // template + // class C { + // public: + // inline operator A(); + // }; + // + // template + // void ref(C c) { + // return foo(c); + // } + public void testUserDefinedConversions_239023() throws Exception { + BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true); + ba.assertNonProblem("foo(c);", 3); + } + // template // class A {}; // diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java index ba141327639..70a6c2e7382 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java @@ -34,6 +34,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.core.parser.util.ObjectSet; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunctionType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; /** @@ -63,6 +64,9 @@ public class SemanticUtil { */ public static final ICPPMethod[] getDeclaredConversionOperators(ICPPClassType clazz) throws DOMException { ICPPMethod[] methods= new ICPPMethod[0]; + if (clazz instanceof ICPPDeferredClassInstance) { + clazz= (ICPPClassType) ((ICPPDeferredClassInstance)clazz).getTemplateDefinition(); + } ICPPMethod[] decs= clazz.getDeclaredMethods(); if(decs != null) { for(ICPPMethod method : decs) {