On 11/4/12 11:36 AM, Dmitry Olshansky wrote:

The fact that algorithm doesn't save iteration state != it counts on
transient .front.

I didn't claim that. My strongest claim was: input-range-having-front-with-mutable-indirection IMPLIES no-transience-guarantee.

Note the IMPLIES (not EQUIVALENT) and no guarantee as opposed to guaranteed change of contents.

A simple example of std.array.array will do - it iterates range once and
pumps elements into appender/builder "sink". So it doesn't require
forward range but just that elements are not _aliased_ under the hood.

No surprise here.

Another example is dirEntries - it returns entries with immutable
strings, but it can't save iteration state. It does work with array
because of no aliasing of .front values.

This example is actually nice because it shows that indeed an input range with NO mutable indirection on ElementType guarantees non-transience.


Andrei

Reply via email to