And the prize goes to D.learn and Simen Kjaeraas :
Use std.range.zip instead:
auto result = map!( (a, b) => a+b )( zip(range1, range2) );
The reason there are two ways is lockstep works better with foreach:
foreach (a, b; lockstep(A, B) ) {
// Use a and b here.
}
Contrast with zip:
foreach (a; zip(A, B) ) {
// Use a[0] and a[1] here.
}
There have been suggestions to better integrate tuples in the language, so in the future zip may have all the advantages of lockstep (and vice versa), but don't cross your fingers.