diff --git a/src/Generator/Passes/ConstructorToConversionOperatorPass.cs b/src/Generator/Passes/ConstructorToConversionOperatorPass.cs index 26e2e511..de32c3e9 100644 --- a/src/Generator/Passes/ConstructorToConversionOperatorPass.cs +++ b/src/Generator/Passes/ConstructorToConversionOperatorPass.cs @@ -23,17 +23,18 @@ namespace CppSharp.Passes if (pointerType != null && !pointerType.IsReference) return false; } - var qualifiedPointee = parameter.Type.SkipPointerRefs(); + var qualifiedPointee = parameter.Type.GetFinalPointee() ?? parameter.Type; Class castFromClass; + var castToClass = method.OriginalNamespace as Class; if (qualifiedPointee.TryGetClass(out castFromClass)) { - var castToClass = method.OriginalNamespace as Class; if (castToClass == null) return false; if (castFromClass == castToClass) return false; } - + if (castToClass != null && castToClass.IsAbstract) + return false; var operatorKind = method.IsExplicit ? CXXOperatorKind.ExplicitConversion : CXXOperatorKind.Conversion; diff --git a/tests/CSharpTemp/CSharpTemp.Tests.cs b/tests/CSharpTemp/CSharpTemp.Tests.cs index a0b395e3..65c72f82 100644 --- a/tests/CSharpTemp/CSharpTemp.Tests.cs +++ b/tests/CSharpTemp/CSharpTemp.Tests.cs @@ -21,6 +21,7 @@ public class CSharpTempTests : GeneratorTestFixture new InheritsProtectedVirtualFromSecondaryBase().Dispose(); new InheritanceBuffer().Dispose(); new HasProtectedVirtual().Dispose(); + new Proprietor(5).Dispose(); using (var foo = new Foo()) { var isNoParams = foo.IsNoParams; diff --git a/tests/CSharpTemp/CSharpTemp.cpp b/tests/CSharpTemp/CSharpTemp.cpp index 853ab162..68e8024b 100644 --- a/tests/CSharpTemp/CSharpTemp.cpp +++ b/tests/CSharpTemp/CSharpTemp.cpp @@ -170,6 +170,18 @@ int AbstractProprietor::parent() const return 0; } +AbstractProprietor::AbstractProprietor() +{ +} + +AbstractProprietor::AbstractProprietor(int i) +{ +} + +Proprietor::Proprietor(int i) : AbstractProprietor(i) +{ +} + void Proprietor::setValue(int value) { m_value = value; diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index ba341a76..468226db 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -117,6 +117,8 @@ public: virtual int parent() const; protected: + AbstractProprietor(); + AbstractProprietor(int i); int m_value; long m_property; }; @@ -125,6 +127,7 @@ class DLL_API Proprietor : public AbstractProprietor { public: Proprietor(); + Proprietor(int i); virtual void setValue(int value); virtual long prop();