Andrei Alexandrescu: > static foreach was part of the plan until recently, but Walter > encountered severe implementation difficulties so we had to abandon it.
I didn't know this. It looks like a simple thing to implement, but it must be an illusion. > I agree that it's odd that the same statement iterates at compile-time > or run-time depending on the iterated type. Between implementing a good static foreach that can be used outside functions too, and the current situation, there is an intermediate possibility: to require the prefix keyword "static" before "foreach" when the foreach is done on a tuple, that is when it's static. This changes nothing in the current D2 semantics. But it makes code a little more readable because you can tell apart with no problems the static case of loop on a tuple from the other one. [Later if Walter finds a way to implement, the static foreach can be made richer, for example letting the compiler translate "static foreach (i; 10 .. 20)" in a "static foreach (i; Range!(10, 20))". And even later if Walter is able the whole thing can be allowed outside functions.] Bye, bearophile
