About default parameters in variadic templates

Don Clugston dac at nospam.com
Mon Sep 17 23:45:45 PDT 2012


On 17/09/12 14:42, Andrej Mitrovic wrote:
> Related: http://d.puremagic.com/issues/show_bug.cgi?id=8676

> A lot of code could be stripped if there was a way to set an optional
> last parameter for variadics. lockstep could then be written as:
>
> auto newLockstep(Args...)(Args args, StoppingPolicy stoppingPolicy =
> StoppingPolicy.shortest)
>      if (allSatisfy!(isInputRange, staticMap!(Unqual, Args)))
> {
>      static if (Args.length > 1)
>      {
>          return Lockstep!(Args)(args, stoppingPolicy);
>      }
>      else
>      {
>          return args[0];
>      }
> }

> but if you don't specify the last StoppingPolicy argument at the call
> site it won't compile:
>
> foreach (x, y; newLockstep(arr1, arr2)) { }
>
> test.d(32): Error: template test.newLockstep does not match any
> function template declaration
> test.d(14): Error: template test.newLockstep(Args...) if
> (allSatisfy!(isInputRange,staticMap!(Unqual,Args))) cannot deduce
> template function from argument types !()(int[],int[])

That just looks like a bug to me. Please enter it in Bugzilla.




More information about the Digitalmars-d mailing list