interface ITest
{
	void Test ();
}

class Tester<T> where T : ITest, new ()
{
	public void Do ()
	{
		new T ().Test ();
	}
}

class Reference : ITest
{
	public void Test ()
	{
	}
}

struct Value : ITest
{
	public void Test ()
	{
	}
}

class C
{
	public static void Main ()
	{
		new Tester<Reference> ().Do ();
		new Tester<Value> ().Do ();
	}
}