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. * ************************************************************************ 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.