On Sun, 11 Jan 2009 06:04:01 +0300, Tim M <a...@b.com> wrote:
On Sun, 11 Jan 2009 15:59:26 +1300, Tim M <a...@b.com> wrote:
On Sun, 11 Jan 2009 15:50:54 +1300, Daniel Keep
<daniel.keep.li...@gmail.com> wrote:
Tim M wrote:
Why is this an error. Dmd wants to make sure that I declare a new
variable in the foreach statement and not use an existing one?
module test;
void main()
{
int i;
int[] nums;
foreach(i; nums)
{
//
}
}
dmd test.d
test.d(7): Error: shadowing declaration test.main.i is deprecated
Yes; as the error states, you're not allowed to define variables with
the same name as variables in an enclosing scope any more.
-- Daniel
Why does it still work for some objects?
This works:
module test;
class A
{
this()
{
//
}
}
class B
{
this()
{
//
}
int opApply (int delegate (inout B) dg)
{
return 1;
}
}
void main()
{
A a;
B b;
foreach(a; b)
{
//
}
}
It is a bug and should be reported.