On Friday, 1 March 2013 at 06:33:42 UTC, deadalnix wrote:

struct GenericSentinelRange(R, Sentinel) {
    R r;

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

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

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

That's exactly what I wrote as well, when I played with the idea before posting. Except I just called the sentinel constant S and added 'enum sentinel = S;' -- not significant extra work.

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.

I'm not confused. The use case for a sentinel range /type/ is always going to be the same, and singular: automating legitimate use cases for sentinels. So, in effect, an argument for one is as good as for the other, when I'm only responding to the calls for use case examples. My mistake was in not making it clear that I was responding just to those, sorry.

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

Which presupposes that I *can* use LDC (or GDC). For many people, it may not be an option. And last time I tried (which has been months now, admittedly) I couldn't get LDC to work for me at all, which is a shame since I'm actually very much interested in it. Either way, reliance on implementation details is not a good thing.

Reply via email to