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?

Reply via email to