Transience of .front in input vs. forward ranges

Era Scarecrow rtcvb32 at yahoo.com
Sat Nov 3 18:30:49 PDT 2012


On Saturday, 3 November 2012 at 23:19:11 UTC, H. S. Teoh wrote:
> I wish Andrei would give some input as to how we should proceed 
> with this. I do consider this a major issue with ranges, 
> because for efficiency reasons I often write ranges that have 
> transient .front values, and they can lead to subtle bugs with 
> the current implementation of std.algorithm. It would be good 
> to settle on this issue one way or another. I'd be happy even 
> if the decision is to say that transient ranges are invalid and 
> shouldn't be considered "real" ranges. Anything is better than 
> the current nebulous state of things which only leads to subtle 
> bugs for the unwary.

  From watching and gleaming from what I have so far, I can only 
think that transient should NOT be the default way that ranges 
work (as it causes too many problems); However transient should 
be allowed (and available) when possible.

  I can only think that perhaps using a template to determine if 
it's transient should be present, that way it's a simple flag to 
enable/disable and should propagate anywhere that that range was 
used.

struct Range(bool isTransient=false) {
   static if (isTransient) {
     //front and transient
   } else {
     //front and non-transient
   }
}

  Unless someone thinks this is a bad approach?


More information about the Digitalmars-d mailing list