On Wed, 16 May 2012 17:37:14 -0400, Nick Sabalausky
<seewebsitetocontac...@semitwist.com> wrote:
A small debate has broken out over on D.learn (
http://forum.dlang.org/thread/jovicg$jta$1...@digitalmars.com#post-jovicg:24jta:241:40digitalmars.com
)
that I thought I should move here.
Basically, the issue is this: Currently, when you have a struct-based
range,
foreach will iterate over a *copy* of it:
Range r;
auto save = r;
foreach(e; r)
assert(r == save);
assert(r == save);
One side of the argument is that this behavior is correct and expected
since
structs are value types, and iterating shouldn't consume the range.
My argument is this:
First of all, foreach is conceptually a flow-control statement, not a
function. So I'd intuitively expect:
Range r;
foreach(e; r) {...}
To work like this:
Range r;
for(; !r.empty; r.popFront)
{
auto e = r.front;
...
}
Hm... proposal:
foreach(e; ref r)
{
}
equates to your desired code. Would this help?
-Steve