using System;

public delegate void Simple ();

public delegate Simple Foo ();

class X
{
	public void Hello<U> (U u)
	{ }

	public void Test<T> (T t)
	{
		T u = t;
		Hello (u);
		Foo foo = delegate {
			T v = u;
			Hello (u);
			return delegate {
				Hello (u);
				Hello (v);
			};
		};
		Simple simple = foo ();
		simple ();
		Hello (u);
	}

	public static void Main ()
	{
		X x = new X ();
		x.Test (3);
	}
}