interface I<T>
{
}

class Foo<T1, T2> where T2 : I<I<T1>>
{
	public Foo (T2 t2)
	{
	}
}

class Bar : I<I<string>>
{
	public static int Main ()
	{
		var foo = new Foo<string, Bar> (new Bar ());
		return 0;
	}
}