Foreach problem

Denis Koroskin 2korden at gmail.com
Sat Jan 10 22:56:55 PST 2009


On Sun, 11 Jan 2009 06:04:01 +0300, Tim M <a at b.com> wrote:

> 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)
> 	{
> 		//
> 	}
> }
>

It is a bug and should be reported.



More information about the Digitalmars-d-learn mailing list