public class Foo
{
}

public class Top<S> where S : Foo
{
	public class Base<T> where T : S
	{
		public class Derived<U> where U : T
		{
			public void Test ()
			{
			}
		}
	}
}

public class Test
{
	public static int Main ()
	{
		Top<Foo>.Base<Foo>.Derived<Foo> d = new Top<Foo>.Base<Foo>.Derived<Foo> ();
		d.Test ();
		return 0;
	}
}