On Monday, 17 June 2013 at 22:29:34 UTC, Joseph Rushton Wakeling wrote:
On 06/17/2013 11:18 PM, Joseph Rushton Wakeling wrote:
A random range should be viewed (IMO) as nothing more than a range that "was" (conceptually) simply filled with random numbers. Calling front on the same range twice in a row *should* produce the same result: No call to popFront => no change to the range. If it did change, it'd be a blatant violation of the range concept. It also means you can't have safe/nothrow/pure/const "front".

Completely agree, and I don't think this is in contradiction with what I've proposed. My proposed "rule" might be better stated to clarify this.

Perhaps this would be a better statement:

************************************************************************ * Iterating fully over a given random range should produce a different *
    * sequence for each such complete iteration.
           *
************************************************************************

I'm not sure what that means but...

So, if you do,

    SomeRandomRange r;
    x = r.front;
    y = r.front;
    assert(x == y);  // Passes!!

But

    SomeRandomRange r;
    arr1 = array(r);
    arr2 = array(r);
assert(x != y); // the two arrays are filled with different sequences.

With reference ranges, that is indeed what you'd get.

I could even add:

     SomeRandomForwardRange r;
     auto arr1 = array(r.save);
     auto arr2 = array(r);
     assert(x == y); // This time both are the same

Reply via email to