public class Foo[T] where T:Foo[T] { public n : T; public next() : T { n; } } public class Goo : Foo[Goo] { public x : int; } public class Test { public static Main() : void { mutable x = Goo(); x=x.next(); } } /* mono fails on this ** (./out.exe:12358): WARNING **: implement me 0x00 ** ERROR **: file class.c: line 2763 (mono_class_from_mono_type): should not be reached aborting... */