D does not provide index for the range iteration. Instead, you can create 'zipped' range.
void main() { auto intr = sequence!"n"(); // 0, 1, 2, ... double[] a = [ 0, 1, 2, 3, 4, 5 ]; foreach(i, x; zip(intr, retro(a))) writeln(i, "\t", x); } zip(intr, retro(a)) is a range of Tuple!(size_t, double), and foreach automatically expand the tow fields of zip front into i and x like follows. foreach(__e; zip(intr, retro(a))) { auto i = __elem[0], x = __elem[1]; // inserted by the compiler writeln(i, "\t", x); } After all, you can get 'index' for range iteration. Kenji Hara 2012/7/3 Joseph Rushton Wakeling <joseph.wakel...@webdrake.net>: > On 02/07/12 17:48, Timon Gehr wrote: >> >> What would be your expected output? > > > I'd expect to see > > 0 5 > 1 4 > 2 3 > 3 2 > 4 1 > 5 0 > > i.e. as if I was foreach-ing over an array with the same values in inverted > order.