std.range.cacheFront proposal&working code: wraps a range to enforce front is called only once

Chris wendlec at tcd.ie
Thu Oct 24 08:55:22 PDT 2013


On Thursday, 24 October 2013 at 15:40:22 UTC, Dicebot wrote:
> On Thursday, 24 October 2013 at 15:36:59 UTC, Chris wrote:
>> How do you define side effects? After all ranges manipulate, 
>> reformat or restructure data.
>
> They should do it in popFront. I'd consider any `front` that 
> does anything but accessing cached value suspicious.

So code like

auto front() {
   doSomething();
   return range[0];
}

should go into

void popFront() {
   doSomething();
   range = range[1..$];
}


More information about the Digitalmars-d mailing list