using System;

public delegate void Foo ();

public class Test<R>
{
	public void World<S,T> (S s, T t)
		where S : X
		where T : S
	{ }

	public void Hello<U,V> (U u, V v)
		where U : X
		where V : U
	{
		Foo foo = delegate {
			World (u, v);
		};
		foo ();
	}
}

public class X
{
	public static void Main ()
	{
		X x = new X ();
		Test<int> test = new Test<int> ();
		test.Hello (x, x);
	}
}