diff --git a/src/Generator/Passes/CheckAmbiguousFunctions.cs b/src/Generator/Passes/CheckAmbiguousFunctions.cs index a44f642e..3b04fb46 100644 --- a/src/Generator/Passes/CheckAmbiguousFunctions.cs +++ b/src/Generator/Passes/CheckAmbiguousFunctions.cs @@ -35,6 +35,16 @@ namespace CppSharp.Passes foreach (var overload in overloads) { + if (function.OperatorKind == CXXOperatorKind.Conversion) + { + if (function != overload && + function.OriginalReturnType == overload.OriginalReturnType) + { + overload.ExplicityIgnored = true; + function.IsAmbiguous = true; + } + continue; + } if (overload == function) continue; if (overload.Ignore) continue; diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index 4ff75db3..d79b7086 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -41,4 +41,7 @@ public: int takesQux(const Qux& qux); Qux returnQux(); operator int() const; + + typedef void *Baz::*FunctionPointerResolvedAsVoidStar; + operator FunctionPointerResolvedAsVoidStar() const { return 0; } };