On Friday, 2 February 2024 at 11:31:09 UTC, Anonymouse wrote:
On Friday, 2 February 2024 at 08:22:42 UTC, Carl Sturtivant wrote:
It seems I cannot pass e.g. an int argument to a Variant function parameter. What's the simplest way to work around this restriction?

The easiest thing would be to actually pass it a `Variant` with `someFunction(Variant(myInt))`.

The more-involved thing would be to write a template constrained to non-`Variants` that does the above for you.

```d
auto someFunction(T)(T t)
if (!is(T : Variant))
{
    return someFunction(Variant(t));
}

auto someFunction(Variant v)
{
    // ...
}

void main()
{
    someFunction(42);
    someFunction("hello");
    someFunction(3.14f);
    someFunction(true);
    someFunction(Variant(9001));
}
```

To be honest, this doesn't make sense.

`if (!is(T : Variant))` returns true for inputs like 42, "hello", 3.14f, but the input is not a Variant but a random type.

Yes, it's nice that it works in this case. It's just not logical, it doesn't make sense because 42 just simply isn't a Variant, it's an `int`.

Reply via email to