Template function specialization doesn't work
Steven Schveighoffer
schveiguy at gmail.com
Tue Jul 7 21:02:51 UTC 2020
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
More information about the Digitalmars-d-learn
mailing list