On Saturday, 16 July 2016 at 20:00:39 UTC, Seb wrote:
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.
int int is a completely different issue, and that has nothing to
do with what you suppose my experience is from other languages.
If anything I come mainly from python so I find not having to
write the type a pretty thing.
However auto should be allowed here. You are defining a variable
and the fact that it's in a foreach shouldn't be of any
importance. The language should enforce orthogonality of
orthogonal things, not break it. A variable definition in a
foreach should be allowed not because I like to be pedantic but
because it's allowed everywhere else. That also stands for the
principle of least surprise.