www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Template argument deduction is too strict

reply Lars Kyllingstad <public kyllingen.NOSPAMnet> writes:
The function template
     void foo(A)(A a, real b) { ... }
is matched by
     foo(1, 1.0L);
but not by
     foo(1, 1.0);
since the second argument is a double literal.

I think the latter should also work, since it would work for a 
non-templated function. Don't you agree? :)

I am using D1, by the way. Is it the same in D2?

-Lars
Oct 21 2008
next sibling parent "Jarrett Billingsley" <jarrett.billingsley gmail.com> writes:
On Tue, Oct 21, 2008 at 9:07 AM, Lars Kyllingstad
<public kyllingen.nospamnet> wrote:
 The function template
    void foo(A)(A a, real b) { ... }
 is matched by
    foo(1, 1.0L);
 but not by
    foo(1, 1.0);
 since the second argument is a double literal.

 I think the latter should also work, since it would work for a non-templated
 function. Don't you agree? :)

 I am using D1, by the way. Is it the same in D2?

 -Lars

It's a bug that Walter tried to fix a while ago, didn't get right, and as far as I know _still_ hasn't gotten right.
Oct 21 2008
prev sibling parent reply Walter Bright <newshound1 digitalmars.com> writes:
Lars Kyllingstad wrote:
 The function template
     void foo(A)(A a, real b) { ... }
 is matched by
     foo(1, 1.0L);
 but not by
     foo(1, 1.0);
 since the second argument is a double literal.
 
 I think the latter should also work, since it would work for a 
 non-templated function. Don't you agree? :)
 
 I am using D1, by the way. Is it the same in D2?

The code: void foo(A)(A a, real b) { } void test() { foo(1, 1.0); } compiles with both D1 and D2.
Oct 21 2008
parent Lars Kyllingstad <public kyllingen.NOSPAMnet> writes:
Walter Bright wrote:
 Lars Kyllingstad wrote:
 The function template
     void foo(A)(A a, real b) { ... }
 is matched by
     foo(1, 1.0L);
 but not by
     foo(1, 1.0);
 since the second argument is a double literal.

 I think the latter should also work, since it would work for a 
 non-templated function. Don't you agree? :)

 I am using D1, by the way. Is it the same in D2?

The code: void foo(A)(A a, real b) { } void test() { foo(1, 1.0); } compiles with both D1 and D2.

Ok, must be that I'm using an outdated compiler, then. I am using 64-bit Linux, so I have to use GDC. (Right?) -Lars
Oct 22 2008