DMD Bug or not? foreach over struct range
Jonathan M Davis
jmdavisProg at gmx.com
Wed May 16 00:38:15 PDT 2012
On Wednesday, May 16, 2012 03:29:23 Nick Sabalausky wrote:
> "Jonathan M Davis" <jmdavisProg at gmx.com> wrote in message
> news:mailman.826.1337151940.24740.digitalmars-d-learn at puremagic.com...
>
> > No. That's expected. Your range is a value type, so it got copied when you
> > used it with foreach.
>
> But foreach isn't a function, it's a flow-control statement.
If it _wasn't_ copied, using foreach would consume your range. It doesn't, and
it would really suck if it did. But
foreach(e; range) {}
pretty has to be translated to something similar to
for(auto r = range; !r.empty(); r.popFront())
{
auto e = r.front;
}
And actually, looking at TDPL (p. 381), that's pretty much _exactly_ what it
gets translated to (save for the exact variable names used).
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list