Template argument deduction from a function call question
Ali Çehreli via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 1 11:37:24 PDT 2015
On 04/01/2015 11:27 AM, Dzugaru wrote:
> This code does work when you provide second (non-default) argument to
> function, and doesn't if you do not (no way it can deduce E solely from
> checks I assume).
>
> My version, in constract, works when you do not provide second argument
> and doesn't if you do.
Another attempt:
import std.range;
ElementType!S
aggregate(alias func, S, E = ElementType!S)(S list, E accum = E.init)
if(is(typeof(func(accum, accum)) == typeof(accum)))
{
foreach(ref e; list) {
accum = func(accum, e);
}
return accum;
}
void main()
{
auto min1 = aggregate!((a, b) { return a < b ? a : b;
})([2,4,1,3,5], int.max);
auto min2 = aggregate!((a, b) { return a < b ? a : b; })([2,4,1,3,5]);
assert(min1 == 1);
assert(min2 == 0);
}
Ali
More information about the Digitalmars-d
mailing list