https://issues.dlang.org/show_bug.cgi?id=12409
bearophile_h...@eml.cc changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED CC| |bearophile_h...@eml.cc Resolution|FIXED |--- --- Comment #7 from bearophile_h...@eml.cc --- Reopened because I think the current design of "each" is too much bug-prone: void main() { import std.stdio, std.algorithm; int[10] a; a.each!((ref x) => x++); a.writeln; a[].each!((ref x, ref i) => x = i); a.writeln; a[].each!((ref x, int i) => x = i); a.writeln; a[].each!q{ a = i }; a.writeln; } [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Most Phobos functions don't accept fixed-size arrays. "each" accepts them, but takes them by value... And "each" accepts functions with a second "i" argument (and offers the index "i" as in the last example), but it ignores it. This is a mess that will cause many bugs. I suggest to tighten the semantics: - For uniformity with Phobos it's better to not accept a fixed-size array. If you want "each" to accept them, then take them by reference only. - How do you use the "i" index with a lambda? - Wrong functions probably should give a compile-time error. --