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.

Reply via email to