interface I<T>
{
}

interface A<Source>
{
	void Test<U> () where U : I<Source>;
}

struct B<TContext> : A<int>
{
	public void Test<U2> () where U2 : I<int>
	{
	}
}

class C : I<int>
{
	public static void Main ()
	{
		new B<string> ().Test<C> ();
	}
}