output ranges: by ref or by value?

Michel Fortin michel.fortin at michelf.com
Fri Jan 1 14:44:30 PST 2010


On 2010-01-01 15:53:42 -0500, Andrei Alexandrescu 
<SeeWebsiteForEmail at erdani.org> said:

> save() is not only for classes. It also distinguishes input ranges from 
> forward ranges. It's the primitive that STL didn't define but should 
> have.

Right. I still maintain that it's a bad approach. I've written a lot of 
algorithms in C++ that worked with iterators, always assuming 
assignment would copy the state. Fortunately I didn't had to use input 
iterators with them, most of the time. But I did once or twice, and the 
thing was working slightly off.

What I'd do instead is somehow make input ranges non-copyable. They 
could be either passed by ref or moved, never copied. This way they 
would still behave exactly like array slices, only not copyable, and 
you get a compile-time error if you try to copy them which is 
infinitely better than a subtle change in behavior.

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list