More tricky range semantics

Tobias Pankrath via Digitalmars-d digitalmars-d at puremagic.com
Fri Jan 16 09:22:41 PST 2015


On Friday, 16 January 2015 at 17:13:33 UTC, Joseph Rushton 
Wakeling wrote:
> On Friday, 16 January 2015 at 17:09:47 UTC, Tobias Pankrath 
> wrote:
>> While the first example is indeed problematic, this one 
>> actually is not. If this does not print the same 10 numbers 
>> every time, your save method is wrong.
>> Regardless of being a reference type or not it has to clone 
>> the RNG state or it doesn't do its job.
>
> I think you've misunderstood what I was getting at, probably 
> because I didn't explain myself well.
>
> Obviously it's correct that the second function example should 
> print out the same thing 10 times.  However, what is wrong is 
> that at the end of that function, the source range -- if a 
> reference type -- should itself have been popFront'ed a 
> sufficient number of times, but it hasn't been.
>
> That's a design fault in the function implementation, which 
> doesn't take into account the desirable behaviour (for the 
> caller) if the range given to the function is a reference type.

Ah, now I understand you. Since copy-construction is undefined 
for ForwardRanges, you cannot guarantee this. Things would be 
better, if we had required that this(this) does the same as .save 
or must be @disabled.

Than it would be clear that you either had to use a reference or 
a pointer as argument to the function.


More information about the Digitalmars-d mailing list