interface I { } class A { public virtual T M (U u) where U : T { return u; } } class B : A>, I { public override I M (U u) { return u; } } class Bug { public static void Main () { var b = new B (); b.M (b); } }