Thats real weird that it would reject your "i" variable, given
that T.length is known at compile time. I think this is a bug. I
can get your code to compile if I change your foreach loop to
this:
foreach(i, U; T)
modTuple[i] = transTupleElem(argTuple[i]); // ok