On 06/17/13 13:23, TommiT wrote: > On Monday, 17 June 2013 at 11:15:24 UTC, Artur Skawina wrote: >> void bar(T...)(T values) { >> T tmp; >> foreach (i, ref v; values) >> tmp[i] = arr[v]*10; >> foo(tmp); >> } > > Cool, I didn't know that you could create multiple variables like that (T > tmp).
A more correct, but a bit less readable version (the types of 'values' and 'arr' elements do not have to match) would be: void bar(T...)(T values) { static if (T.length) { NTup!(T.length, typeof(arr[T[0].init])) tmp; foreach (i, ref v; values) tmp[i] = arr[v]*10; foo(tmp); } else foo(); } template NTup(size_t N, T...) { static if (N>1) alias NTup = NTup!(N-1, T, T[$-1]); else alias NTup = T; } artur