Template argument deduction from a function call question
Dzugaru via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 1 11:46:47 PDT 2015
On Wednesday, 1 April 2015 at 18:37:24 UTC, Ali Çehreli wrote:
> 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
This is perfect, many thanks. Didn't know I can use "=" in
template parameter list.
More information about the Digitalmars-d
mailing list