I don't understand the !hasElaborateAssign!T or !hasElaborateCopyConstructor!T restrictions. D does allow objects to be moved, which is what the internals do.

As for it being a template constraint, it's the whole point of having a template constraint. In fact, it gives more meaningful feedback than "too complex" which doesn't carry actionable information.