When you have code like the following:
static T GenericConstruct() where T : new() { return new T(); }
The C# compiler insist
Interesting observation :)
Here is a simpler variation on your solution:
static T Create() where T : new() { Expression> e = () => new T(); return e.Compile()(); }
Obviously naive (and possible slow) :)