digitalmars.D - Template argument deduction is too strict
- Lars Kyllingstad <public kyllingen.NOSPAMnet> Oct 21 2008
- "Jarrett Billingsley" <jarrett.billingsley gmail.com> Oct 21 2008
- Walter Bright <newshound1 digitalmars.com> Oct 21 2008
- Lars Kyllingstad <public kyllingen.NOSPAMnet> Oct 22 2008
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
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
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
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









"Jarrett Billingsley" <jarrett.billingsley gmail.com> 