I guess the discussion on bugzilla strayed quite far from original point,
so I'll answer here.
I don't understand you point about "Now if we bundle data and Range
interface
together all kind of funny things happen." A type that implement a range
always
holds data, usually provides many other features that just
range/iteration,
Look into std/container.d. Containers hold data, Ranges traverse data (and
are separate struct types). Think, how would you generally hold data in
something which exhaust itself on iteration? There is save(), but then
again it may not be there :) And it creates _new_ range object. See, all
kind of complications from mixing things, when they are intended to
simplify programing.
--
Using Opera's revolutionary email client: http://www.opera.com/mail/