I don't understand a const

Brad Roberts braddr at puremagic.com
Thu Sep 2 11:11:52 PDT 2010


On 9/2/2010 5:59 AM, Simen kjaeraas wrote:
> bearophile <bearophileHUGS at lycos.com> wrote:
> 
>> This program doesn't compile, dmd prints the errors:
>> test.d(4): Error: template test.foo(T) does not match any function template
>> declaration
>> test.d(4): Error: template test.foo(T) cannot deduce template function from
>> argument types !()(const(int),int)
>> test.d(9): Error: template instance test.bar!(int) error instantiating
>>
>> Are you able to tell me what is the error in this code?
>>
>>
>> void foo(T)(const T a, out T b) {}
>>
>> void bar(T)(const T x, out T y) {
>>     foo(x, y); // line 4
>> }
>>
>> void main() {
>>     int s1, s2;
>>     bar(s1, s2); // line 9
>> }
>>
>>
>> Bye, and thank you,
>> bearophile
> 
> Simpler test case:
> 
> void bar(T)(const T x, out T y) {}
> 
> void main() {
>     const int s1;
>     int s2;
>     bar(s1, s2);
> }
> 
> It seems DMD is confused by const(int) being such a nice fit for the
> first parameter. This might have to do with s2 = s1 being ok.
> 
> It is probably worth noting that this works:
> 
> 
> import std.traits;
> 
> void bar(T)(const T x, out T y) {}
> 
> void main() {
>     const int s1;
>     int s2;
>     bar!(CommonType!(s1,s2))(s1, s2);
> }

http://d.puremagic.com/issues/show_bug.cgi?id=4594




More information about the Digitalmars-d-learn mailing list