Wow! That's so very cool! We can make it even nicer with
template Unroll(alias CODE, alias N, alias SEP="")
{
enum t = replace(CODE, "%", "%1$d");
enum Unroll = iota(N).map!(i => format(t, i)).join(SEP);
}
And use % as the placeholder instead of the ugly %1$d:
mixin(Unroll!("v1[%]*v2[%]", 3, "+"));
It actually gets quite readable now.
On Friday, 31 May 2013 at 17:30:13 UTC, Peter Alexander wrote:
Remember that in D, most side-effect free functions can be run
at compile time. No need for recursive template trickery:
mixin(iota(3).map!(i => format("v[%1$d]+=rhs.v[%1$d];",
i)).join());