I'm sorry, but I just see a lot of fiddly, fragile code.  The minor gain of automatically enforcing constraints in tests isn't worth the pain of counting constructor parameters, and keeping them up to date.

And I think we could solve the same problem more concisely and more safely with some factory methods (eg the static methods in TransMemoryUnit/TMUVariant) or better still, with the builder pattern.