using System; public class B<T> { } public class B2 : B<object> { } public class C { public static void Test<T, I> () where T : B<I>, I { Foo<T, I> (); } public static void Foo<T, I> () where T : B<I>, I { } public static int Main () { Test<B2, object> (); return 0; } }