On Saturday, 6 July 2019 at 14:48:04 UTC, Adam D. Ruppe wrote:
[...]
So this is a case of input range behavior - always consuming
the underlying file - combined with buffering of two elements
at once, leaving 5,6 behind, and the reuse of the buffer
meaning you see that 5,6 again on the next call.
Thanks for clearifing what happens. In my oppinion the behaviour
of take() should be better defined. It's clear, that take()
returns a range with the first n elements of the underlaying
range (and that is done lazily). But it's not specified what
happens with the underlaying range. As the behaviour is
unpredictable (or at least hard to predict), one should assume,
that the underlaying range is completely destroyed by take().
This makes take() much less usefull, than it could be, in my
eyes. :-(