On Friday, 1 March 2013 at 06:19:19 UTC, Chris Nicholson-Sauls wrote:
A use case that comes immediately to mind: a sentinal range that, yes wraps, an infinite (but predictable!) range, effectively allowing you to take a head-slice of the infinite range.

auto foo = infiniteRangeOfEvenNumbers();
auto upto1000 = GenericSentinalInputRange!1000( foo );


struct GenericSentinelRange(R, Sentinel) {
    R r;

    @property auto front() {
        return r.front;
    }

    void popFront() {
        r.popFront();
    }

    @property empty() {
        return r.front == Sentinel;
    }
}

We don't need a new type of range at all. You confuse legitimate uses case for using a sentinel to terminate a range and uses case where an actual sentinel range is needed.

So... I could live without a standard sentinal range concept (have so far, using sentinal injection with input ranges, which as Walter pointed out is really an incorrect use (abuse?) of input ranges), but I also know I'd be using it if it existed (and thereby cleaning up some code versus how I do it now).

You can live without, and guess what : if you use LDC (and probably GDC) you'll get the performance boost Walter is talking about.

Reply via email to