diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 6137134d..c3ea4093 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -251,12 +251,12 @@ namespace CppSharp if (Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass()); if (Options.GenerateDefaultValuesForArguments) { TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass()); TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass()); } + TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass()); TranslationUnitPasses.AddPass(new MultipleInheritancePass()); } TranslationUnitPasses.AddPass(new DelegatesPass()); diff --git a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs index 2c1c04da..850b1e60 100644 --- a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs +++ b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs @@ -64,7 +64,8 @@ namespace CppSharp.Passes Namespace = internalImpl, OriginalFunction = abstractMethod, IsPure = false, - SynthKind = FunctionSynthKind.AbstractImplCall + SynthKind = abstractMethod.SynthKind == FunctionSynthKind.DefaultValueOverload ? + FunctionSynthKind.DefaultValueOverload : FunctionSynthKind.AbstractImplCall }; impl.OverriddenMethods.Clear(); impl.OverriddenMethods.Add(abstractMethod); @@ -120,7 +121,7 @@ namespace CppSharp.Passes } else { - abstractMethods.RemoveAt(i); + abstractMethods.RemoveAt(i); } } } diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index 9e321cb4..aa4f3b92 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -444,6 +444,12 @@ private: Foo m_foo; }; +class DLL_API HasPureVirtualWithDefaultArg +{ +public: + virtual void pureVirtualWithDefaultArg(Foo* foo = nullptr) = 0; +}; + class DLL_API HasOverridesWithChangedAccessBase { public: