Request: a more logical static array behavior
Maxim Fomin
maxim at maxim-fomin.ru
Thu Aug 15 06:50:44 PDT 2013
On Thursday, 15 August 2013 at 12:44:09 UTC, Tommi wrote:
>
> I don't expect int[3] to implicitly convert to int[] during
> type deduction for the same reason that I don't expect int to
> implicitly convert to long during type deduction (even though I
> know that int implicitly converts to long in all kinds of other
> contexts):
>
> void getLong(T)(T arg)
> if (is(T == long))
> {
> }
>
> void main()
> {
> int n;
> getLong(n); // int doesn't implicitly convert to long
> }
>
OK,
void getLong(T)(T arg)
if (is(T : long))
{
}
void main()
{
int n;
getLong(n); // int is implicitly convertible to long
}
now you have "implicit conversion from int to long during type
deduction".
>> Also actual conversion happens later in some completely
>> unrelated to type deduction compiler part.
>
> I know implicit conversion happens at a later stage (not during
> type deduction). But I don't have any other words to describe
> it other than saying "implicit conversion during type
> deduction". If you can provide me some more exact language,
> please do.
There is a test whether base types are equal (which happens in
many stages, including type deduction) and conversion which
happens in later stage.
>> Compiler "doesn't give the benefit to doubt" as there are no
>> hints here about dynamic array.
>
> Why would the compiler need a hint? The compiler knows that the
> static array can implicitly convert to dynamic array, so it
> should be able to check if the function could be called with
> the argument first implicitly converted to a dynamic array.
>
Because I was speaking about general case. In this case yes, dmd
can know beforehand that T[N] can be converted to T[]. In general
case which can involve alias this (including multiple alias this)
the problem can be more complex.
More information about the Digitalmars-d
mailing list