If you do this:

    import std.algorithm : sum;
    import core.time : Duration;

    Duration[] parts;
    auto total = parts.sum;

You'll get an error ("struct core.time.Duration member this is not accessible"). That's because the Duration constructor is private, and `sum` calls `sum(r, Unqual!Seed(0))`. BTW, not the most helpful of messages for beginners, maybe this could be phrased to say the ctor is private?

I suppose that the ctor is private due to the arbitrary nature of its input units (hecto-nanoseconds), even though Duration(0) is unambiguous. On the other hand, sum has to use Seed(0) instead of Seed.init because some types don't use 0 as .init, namely floats. The result is that you have to use range.sum(Duration.zero), or Duration.init.

Something here rubs me the wrong way, but I can't tell exactly what it is, or what can be done about it :)

Reply via email to