Foreach problem

Tim M a at b.com
Sat Jan 10 19:04:01 PST 2009


On Sun, 11 Jan 2009 15:59:26 +1300, Tim M <a at b.com> wrote:

> On Sun, 11 Jan 2009 15:50:54 +1300, Daniel Keep  
> <daniel.keep.lists at 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)
	{
		//
	}
}



More information about the Digitalmars-d-learn mailing list