On Sunday, 14 February 2016 at 18:28:11 UTC, Jonathan M Davis
wrote:
An immutable range fundamentally does not work. The same goes
with const. In fact, a type that's immutable is going to fail
isInputRange precisely because it can't possibly function as
one. While empty and front may be callable on an immutable
range, depending on their exact signatures, popFront cannot be,
because it has to mutate the range in order to work.
Thanks. I didn't know that iterating a range means mutating its
contents. I still don't quite get it, and it is probably because
I don't fully understand ranges. I think what confuses me the
most is their analogy to containers. It's no problem to iterate
over a container of immutable data, but it is for a range.
I thought that joiner provided a contiguous view on distinct
ranges, without needing to touch these. Is there another method
to traverse a range of ranges without making copies or mutation?