Type inference and overloaded functions
Timon Gehr
timon.gehr at gmx.ch
Tue Dec 10 02:34:41 PST 2013
On 12/10/2013 08:29 AM, Kenji Hara wrote:
>
> This is an intended behavior. An array literal has dynamic array type
> *by default*.
> But all of literals in D behave as polymorphic.
>
> char c = 'A'; // character literal has char type by default
> dchar d = 'A'; // but it may be implicitly typed as wchar/dchar
>
> string str = "hello";
> dstring dstr = "hello"; // string literal is implicitly typed as dstring
>
> int[] darr = [1,2,3];
> int[3] darr = [1,2,3]; // implicitly typed as int[3]
>
> So, an array literal [1,2,3] is implicitly convertible both to int[] and
> int[3].
> And, int[3] is more specialized than int[], so overload resolution will
> choose the first 'bar'.
>
> Kenji Hara
Match with implicit conversion cannot be what is really happening as
otherwise the following call would be ambiguous:
int bar(int[3] arr){
return 1;
}
int bar(double[] arr){
return 2;
}
int bar(int[] arr){
return 3;
}
static assert(bar([1,2,3])==1);
More information about the Digitalmars-d-learn
mailing list