On Friday, 27 November 2015 at 09:20:23 UTC, Jonathan M Davis wrote:
Obviously, Andrei will have to answer to know what he meant, but with regards to ranges, I would consider a reference type to be one where in

auto copy = range;

doing anything to copy or range does the exact same thing to the other, because they refer to the exact same state. Something like save is required to get a separate range where popping elements from one will not affect the other.

Unfortunately it's a bit more complicated than that, because it's readily possible to have ranges where

    auto copy = range;

... will copy _some_ of the internals by value, and some by reference -- e.g. a range whose private data includes some integer values and a dynamic array.

That's not necessarily a problem if the reference-type data does not influence the range's behaviour (e.g. you're doing forward iteration over a container accessed by ref), but it's readily possible to imagine a range design where

    auto copy = range;
    copy.popFront();

... will affect range's state without updating it to the _same_ state as copy.

Reply via email to