| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
October 21, 2008 Template argument deduction is too strict | ||||
|---|---|---|---|---|
| ||||
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
| ||||
October 21, 2008 Re: Template argument deduction is too strict | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Lars Kyllingstad | 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.
| |||
October 22, 2008 Re: Template argument deduction is too strict | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Lars Kyllingstad | 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.
| |||
October 22, 2008 Re: Template argument deduction is too strict | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | 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
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply