xxxxxxxxxx
template subjoin(funcs...)
if (funcs.length > 0)
{
struct Subjoined(T)
{
T value;
alias value this;
static foreach (func; funcs)
{
mixin(
"auto ref ", __traits(identifier, func), "(Args...)(auto ref Args args)", q{{
import std.functional : forward;
return func(value, forward!args);
}}
);
}
}
Subjoined!T subjoin(T)(T value)
{
return typeof(return)(value);
}
}
void f(Range)(Range range)
{
import std.stdio;
while (!range.empty)
{
writeln(range.front);
range.popFront;
}
}
void main()
{
import std.range.primitives : empty, front, popFront;
f([ 1, 2, 3 ].subjoin!(empty, front, popFront));
}