Is this a bug?

Márcio Martins marcioapm at gmail.com
Tue Oct 16 20:43:41 UTC 2018


On Tuesday, 16 October 2018 at 13:09:34 UTC, Steven Schveighoffer 
wrote:
> On 10/15/18 4:36 PM, Márcio Martins wrote:
>> [...]
>
> Hm... didn't realize that. It seems to me like an odd 
> limitation, but I can see how it's ambiguous.
>
> The solution is to double-template:
>
> template incx(Args...)
> {
>    void incx(T)(ref T t)
>    {
>       ++t.x;
>    }
> }
>
>> [...]
>
> Not a bug, because when you explicitly specify template 
> parameters, they are specified in left-to-right order.
>
> You have incx(T, Args...)(ref T t)
>
> t.incx!(1, 2, 3); // 1 => T (error), 2 => Args[0], 3 => Args[1]
> incx(t, 1, 2, 3); // typeof(t) => T (uses IFTI), Args == empty 
> tuple,
>                   // 1, 2, 3 => extra runtime parameters that 
> don't match anything?
>
> -Steve

Ahah! Template inception is exactly what I was looking for! Works 
great!
Thanks for the solution and the explanation!


More information about the Digitalmars-d-learn mailing list