Type inference and overloaded functions

Ali Çehreli acehreli at yahoo.com
Mon Dec 9 22:59:49 PST 2013


On 12/09/2013 10:52 PM, Jonathan M Davis wrote:
> On Tuesday, December 10, 2013 07:47:38 FreeSlave wrote:
>> I just found weird D behavior about inference of array types.
>>
>> Let's suppose we have these overloaded functions:
>>
>> import std.stdio;
>>
>> void bar(const(int[3]) arr)
>> {
>>       writeln("static array");
>> }
>>
>> void bar(const(int[]) arr)
>> {
>>       writeln("array slice");
>> }
>>
>> // In main we have something like that:
>> int main(string[] args)
>> {
>>       bar([1,2,3]);
>>       writeln(typeof([1,2,3]).stringof);
>>       return 0;
>> }
>>
>> Weird thing is that the static array version of bar is called,
>> but typeof().stringof is int[], not int[3].
>
> Array literals are always dynamic arrays. int[3] is a static array.
>
> - Jonathan M Davis
>

The original question is valid then: [1,2,3] goes to the static array 
overload.

Ali



More information about the Digitalmars-d-learn mailing list