public class Grid<CT>
		where CT : Grid<CT>.GPD.GC, new ()
{
	public abstract class GPD
	{
		public GPD ()
		{
			ctInst = new CT ();
		}

		public readonly CT ctInst;

		public abstract class GC
		{
		}
	}
}

public class H : Grid<H.MyCT>.GPD
{
	public class MyCT : GC
	{
		// When no explicit default constructor is present GMCS fails to compile the file.
		// When it is present the execution crashes on mono.
		//      public MyCT () {}
	}
}

public class TheTest
{
	public static void Main (string[] args)
	{
		new H ();
	}
}