<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Ryan Joseph <<a href="mailto:genericptr@gmail.com">genericptr@gmail.com</a>> schrieb am Mo., 7. Okt. 2019, 00:16:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
> <br>
>>> 3.<br>
>>> timpfuncspez2.pp<br>
>>> DoThis<T><br>
>>> DoThis<T,U><br>
>>> Delphi gives an error "Ambiguous call to DoThis". FPC silently<br>
>>> selects the one with only one param. IMO this is dangerous, it<br>
>>> should give an error.  <br>
> <br>
> generic function DoThis<T>(a: T): T; overload;<br>
> begin end;<br>
> generic function DoThis<T,U>(a: T): U; overload;<br>
> begin end;<br>
> <br>
> begin<br>
>  DoThis(3); // both fits, should give an error<br>
> end;<br>
<br>
This is debatable I think but I understand why "Ambiguous call to DoThis” would make sense. I’m pretty sure C# does this also.<br>
<br>
What is the rule then? I’ll have to think about that some more.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">There is nothing debatable here. If a generic parameter is not used in the parameter list (cause it's used in the result type (either directly or to specialize something else), only the body of the routine or even not at all), then that routine must not be used for implicit specialization. </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>