WTF does "Enforcement failed" actually mean?
Marco Leise via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Oct 1 04:01:53 PDT 2015
Am Thu, 01 Oct 2015 08:52:43 +0000
schrieb John Colvin <john.loughran.colvin at gmail.com>:
> On Thursday, 1 October 2015 at 07:08:00 UTC, Russel Winder wrote:
> > On Wed, 2015-09-30 at 23:35 -0700, Ali Çehreli via
> > Digitalmars-d-learn wrote:
> >> On 09/30/2015 10:46 PM, Russel Winder via Digitalmars-d-learn
> >> wrote:
> >> > [...]
> >>
> >> It's coming from the following no-message enforce():
> >>
> >> enforce(!r.empty);
> >>
> >>
> >> https://github.com/D-Programming-Language/phobos/blob/master/std/algo
> >> rithm/iteration.d#L2481
> >>
> >> You are using the no-seed version of reduce(), which uses the
> >> first element as seed, which means that the range cannot be
> >> empty.
> >
> > Well that explanation (*) makes it abundantly clear that the
> > error reporting from this part of Phobos is distinctly
> > substandard, let alone below par.
> >
> >
> > (*) Which is clear and informative!
>
> Bug report? Then it'll get fixed.
The problem is that in out minds addition has an implicit seed
value of 0 and multiplication has 1, so a potentially empty
range doesn't immediately raise a red flag.
The correct thing to use, following this train of thought, is
http://dlang.org/phobos/std_algorithm_iteration.html#.sum
(Additionally it provides better accuracy when summing up
floating-point values.)
--
Marco
More information about the Digitalmars-d-learn
mailing list