Consider the following equivalent code using zip and lockstep respectively to iterate over the entries in an array and set their values:
auto arr1 = new double[10]; foreach(i, ref x; zip(iota(10), arr1)) { x = i; } writeln(arr1); auto arr2 = new double[10]; foreach(i, ref x; lockstep(iota(10), arr2)) { x = i; } writeln(arr2); The first array will still be full of nan's when it is output, while the second will have values set correctly. Can anyone offer a reasonable explanation why this should be so? It looks like a bug to me, or at best an unreasonable difference in functionality. :-(