challenge #2: implement the varargs_reduce metafunction

janderson askme at me.com
Tue Jan 23 09:22:53 PST 2007


Lutger wrote:
> Bruno Medeiros wrote:
>> This one seems much more easy that the fist challenge, so I suspect 
>> I'm missing something.
> 
> I suspect the same since I have just a few lines. This is what I came up 
> with, does it meet the requirements? There must be something wrong.
> 
> template reduce(alias fn)
> {
>     typeof(T[0]) reduce(T...)(T args)
>     {
>         static assert( is(T[0] == T[1]) &&
>                        is( T[0] == typeof( fn(T[0], T[1]) ) ),
>                        "try again" );
>         static assert( args.length > 1, "nothing to reduce here");
> 
>         auto result = args[0];
>         foreach(arg; args[1..$])
>             result = fn(result, arg);
>         return result;
>     }
> }
> 
> example:
> 
> alias reduce!(function(int a, int b) { return (a > b) ? a : b; }) max;
> assert( max(2,55,787) == 787 );

What about maxtype support?



More information about the Digitalmars-d mailing list