Templated Function can't deduce function arguments

Timon Gehr timon.gehr at gmx.ch
Thu May 23 10:52:12 PDT 2013


On 05/23/2013 07:21 PM, Jonathan Crapuchettes wrote:
> On Wed, 22 May 2013 23:28:21 -0400, Jonathan M Davis wrote:
>
>> On Wednesday, May 22, 2013 21:31:53 Steven Schveighoffer wrote:
>>> On Wed, 22 May 2013 21:16:44 -0400, Jonathan Crapuchettes
>>>
>>> <jcrapuchettes at gmail.com> wrote:
>>>> Can anyone tell me why this doesn't compile? Dmd 2.062 says that it
>>>> cannot deduce the template function from arguments types.
>>>>
>>>> import std.stdio;
>>>>
>>>> void main()
>>>> {
>>>>
>>>> test!(dchar, int)('b', 6, 'a', 54);
>>>>
>>>> }
>>>>
>>>> template test(Types...)
>>>> {
>>>>
>>>> void test(T...)(const Types v, const T values...)
>>>
>>> Do you need that last elipsis? I thought you didn't, but not sure.
>>
>> You don't, and I'm surprised that it compiles, since I don't think that
>> the elipsis is actually legal there. AFAIK, the only time that an
>> elipsis is legal in the function arguments is with array variadics; e.g.
>>
>> auto foo(int[] bar...) {...}
>>
>> - Jonathan M Davis
>
> The last ellipsis was a remnant of testing. Thank you for pointing that
> out. Removing it still doesn't help the compiler deduce the argument
> types. It appears that the issue has to do with the usage of the "Types"
> TypeTuple. If the
>
> const Types v
>
> is swapped out for
>
> const dchar v1, const int v2
>
> the code compiles just fine. This makes me wonder if dmd is not
> interpreting the Types TypeTuple correctly in the inner-function.
>
> Jonathan
>

Yes, this is indeed a compiler bug.

http://d.puremagic.com/issues/


More information about the Digitalmars-d-learn mailing list