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?

Reply via email to