using System; public class FnPointer { public unsafe static class Program { static delegate* pointer = &M0; public static int M0() { return 0; } static void M1(delegate* f) { int i = 42; int j = f(ref i, out object? o); } static void M2(delegate* unmanaged[Stdcall/*, StdcallSuppressGCTransition*/] f) where T : new() { int i = 42; f(ref i, out object? o, new T()); } static void M3(delegate* managed f) { int i = 42; ref int j = ref f(ref i, out object? o, in i); } static void M4(delegate* f) where T : new() { int j = f(new T()); } static void M5(delegate* f, delegate* ff) { M5(ff, ff); // implicit conversion due to implicit reference conversion } static void M6(delegate* f, delegate* ff) { M6(ff, ff); // implicit conversion due to implicit pointer conversion } class A { } class B : A { } } }