Help with specific template function

Vladimirs Nordholm v at vladde.net
Mon Mar 26 06:40:34 UTC 2018


On Sunday, 25 March 2018 at 21:31:16 UTC, aliak wrote:
> On Sunday, 25 March 2018 at 19:06:14 UTC, Vladimirs Nordholm 
> wrote:
>> On Sunday, 25 March 2018 at 18:24:37 UTC, Vladimirs Nordholm 
>> wrote:
>>> The underlying problems are:
>>> * How do I ensure the two first arguments (used as 
>>> coordinates) are types of numbers (all kinds: ints, floats, 
>>> reals, etc.)
>>> * At least one argument is passed after the coordinates
>>
>> I found a solution which satisfies my needs :)
>>
>>     void foo(X, Y, Args...)(X x, Y y, Args args)
>>     if (__traits(isArithmetic, x) && __traits(isArithmetic, y) 
>> && args.length >= 1)
>>     {
>>         // ...
>>     }
>
> FYI there's also 
> https://dlang.org/library/std/traits/is_numeric.html incase you 
> haven't see it -takes in to account bools and chars, which 
> depending on your usecase you may not want to count as 
> arithmetic.
>
> Cheers
> - Ali

Thanks Ali, I had not thought about chars, bools, etc.

However I do not understand how to use that with my arguments. 
Eg. I would expect to do something like:

     void foo(X, Y, Args...)(X x, Y y, Args args)
     if(isNumeric!(x) && isNumeric!(y) && args.length >= 1)
     {
         // ...
     }

gives the error

     template instance isNumeric!(x) does not match template 
declaration isNumeric(T)

How would I resolve this issue?


More information about the Digitalmars-d-learn mailing list