why is this cast required?
Dejan Lekic
dejan.lekic at gmail.com
Sat Sep 26 19:39:35 UTC 2026
On Saturday, 26 September 2026 at 16:49:48 UTC, DanielG wrote:
> I appreciate the reply, but that's not the question I am asking.
>
> I am asking why there's a difference between an explicitly
> typed variable, and an explicitly typed function argument -
> both of which 'receive' the mixed-type array literal.
>
> The compiler will implicitly upgrade the function pointers to
> delegates in one case, but not the other. What is the basis, or
> philosophy behind this policy?
>
> Why do variable assignments receive this treatment, but not
> function arguments?
>
> IMO this violates the Principle of Least Astonishment.
A function argument generally has to be given a type independent
of which parameter type it'll end up matching, because overload
resolution needs to compare each argument's own type against
every candidate's parameter types to pick the best match — if
argument inference depended on "the parameter type of whichever
overload gets picked," that's circular. A variable declaration (
`IntFunc[] explicit = [...]` ) doesn't have this problem: there's
exactly one destination type, known up front, so the compiler can
safely bias the literal toward it.
More information about the Digitalmars-d-learn
mailing list