On 6/8/2015 9:55 AM, Dennis Ritchie wrote:
On Monday, 8 June 2015 at 00:42:12 UTC, Mike Parker wrote:
When implementing a custom range, is it correct to say that
consecutive calls to r.front with no intervening calls to popFront
should return the same value?

Yes. For examle:

import std.stdio, std.range;

template foo(T) {
     auto foo(R)(R range) {
         while (!range.empty) {
             writeln(range.front);
             // .front --> the first element of the range
             range.popFront;
             // .popFront --> to extract the first element of the range
         }
     }
}

void main() {
     foo!(int[])([1, 2, 3]);
}

I know how to use a range :) What I'm asking about is a requirement on implementing front on a custom range. Is there a rule that says when I implement my own range, consecutive calls to front must return the same value until popFront is called?

Example:
Is this a valid implementation of front?
auto front() { return _member++; }

Or must it be this:
auto front() { return _member; }
void popFront() { ++_member; }

My current understanding is that the former is incorrect, but I'm looking for confirmation of that. I can't find it written down anywhere.


Reply via email to