On 7/7/20 4:21 PM, IGotD- wrote:
On Tuesday, 7 July 2020 at 20:14:19 UTC, IGotD- wrote:

Thank you, that worked and now it picked the correct overloaded function. I don't understand why and it is a bit counter intuitive. Why two template arguments as I'm not even us using U?

If you look at the article

https://dlang.org/articles/templates-revisited.html#specialization

Then it mentioned that (T : T*) would work. Intuitively, then you would think (T : T[]) would work.

Here (T : T[]) is even the example with the correct double[] type as a correct example as well.

https://dlang.org/spec/template.html#parameters_specialization

I'm confused.

That's not IFTI, that's template instantiation.

I bet if you did:

overloadedFunction!(ubyte[])(arSlice)

it would pick the second one.

there is some extra magic going on for IFTI, and I'm not sure how it figures out what to do. I would agree with you that if explicit templates use that rule, so should IFTI. But perhaps there's a good reason why it can't be done.

So possibly:

overloadedFunction(arSlice) => Pattern match `ref T[]` to `ubyte[]` => T is ubyte => Check ubyte for T : T[], no match.

-Steve

Reply via email to