to auto or not to auto ( in foreach )

Seb via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jul 16 13:00:39 PDT 2016


On Saturday, 16 July 2016 at 14:11:34 UTC, cym13 wrote:
> On Saturday, 16 July 2016 at 14:00:56 UTC, dom wrote:
>> foreach(auto v; msg)
>>   writeln(v);
>>
>> gives an error that a basic type is expected
>>
>> foreach(v; msg)
>>   writeln(v);
>>
>> works
>>
>> .. but why?
>
> Arbitrary limitation. If you want to say how surprising and 
> uselessly limiting it is wait at the end of the line.
>
> It's not actually a problem in practice because you just have 
> not to put it but it is part of those frustrating little edge 
> cases with no reason to be.

It's not arbitrary. It keeps the language simple and easy to 
read. After all the entire auto keyword is just there, because 
the compiler needs a keyword and in loops it's clearly defined 
what the type will be.
You don't complain that `int int` is forbidden, or do you?

I guess you are frustrated because you are used to this pattern 
from other, inferior languages. I bet you will soon start to 
appreciate the syntactic sugar that D provides.


More information about the Digitalmars-d-learn mailing list