"Range invalidation" ?

Mark via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Aug 30 06:28:48 PDT 2017


C++ has the issue of iterator invalidation, where certain 
operations on a container while iterating on it may invalidate 
the iterator, in which case it is no longer safe to use the 
iterator.

D has ranges, but presumably the same issue can arise in D. For 
instance, if I have a ForwardRange and I use the save primitive 
to keep a reference to some tail of it, then I can manipulate one 
of the ranges in a way that may leave the other in an undefined 
state. For instance, if the range is allocated on the heap and at 
some point I free its memory, then the range's copy is going to 
point to some garbage.

Is there some documentation anywhere on:
1. Primitive operations, e.g. concatenation, that may invalidate 
a range.
2. Funtions in Phobos, operating on a range, e.g. (filter, sort, 
etc.), that may invalidate it?

Thanks. -Mark


More information about the Digitalmars-d-learn mailing list