Against enforce()

Gerrit Wichert gwichert at yahoo.com
Fri Mar 18 13:38:28 PDT 2011


I would say it is a bug in the contract.
The signature is not normalized and the user gets a chance to provide
conflicting parameters. I think that it would be best to deduce the 
direction
from the order of the start and end parameters. Then the stepsize can be 
made
absolute.

Am 18.03.2011 09:14, schrieb Kagamin:
> So this is a bug? This is a contract, not a validation of user input.
> struct Iota(N, S) if ((isIntegral!N || isPointer!N)&&  isIntegral!S)
>   {
>      private N current, pastLast;
>      private S step;
>      this(N current, N pastLast, S step)
>      {
>          enforce((current<= pastLast&&  step>  0) ||
>                  (current>= pastLast&&  step<  0));
>          this.current = current;
>          this.step = step;
>



More information about the Digitalmars-d mailing list