On 11/18/2013 11:44 AM, Andrei Alexandrescu wrote:
1. Consider:this(in DateTime dateTime, immutable TimeZone tz = null) nothrow { try this(dateTime, FracSec.from!"hnsecs"(0), tz); catch(Exception e) assert(0, "FracSec's constructor threw when it shouldn't have."); } That's because FracSec.from!"hnsecs"(n) may throw for some values of n. To me, this is overkill. Clearly there must be a way to construct a zero time interval without much code being executed at all, let alone checks and exceptions and whatnot. (In particular FracSec.zero looks like the ticket.) Furthermore, having a simpler constructor call a more complicated constructor reminds one of the mathematician who throws away the water in the kettle to regress to an already solved problem.
I agree. But I'll add that it would be even better to redesign FracSec.from so it never throws at all - have it assert(0) for invalid values being passed to it.
Exceptions should not be thrown for invalid arguments. Data validation should be handled separately.
