writeln, UFCS and flip

bearophile bearophileHUGS at lycos.com
Thu Apr 25 08:28:19 PDT 2013


This is not a real use case because the reduce!() of Phobos will 
be fixed for UCFS, but sometimes you can't swap the arguments of 
a function:


import std.stdio, std.algorithm, std.range;

/// flip2!foo(a, b, c...) === foo(b, a, c...)
template flip2(alias callable) {
     auto flip2(T2, T1n...)(T2 y, T1n others)
     if (T1n.length > 0) {
         return callable(others[0], y, others[1 .. $]);
     }
}

void main() {
     reduce!q{a * b}(1, iota(1, 10))
     .writeln;

     iota(1, 10)
     .flip2!(reduce!q{a * b})(1)
     .writeln;
}


Bye,
bearophile


More information about the Digitalmars-d-learn mailing list