On 02/29/2012 05:50 PM, Alex Rønne Petersen wrote:
(Didn't have much luck posting this on dmd-internals, so I'm posting here.)

Hi,

Consider this code:

bool contains(T)(T[] arr, scope bool delegate(T) dg)
in
{
assert(dg);
}
body
{
foreach (i; arr)
if (dg(i))
return true;

return false;
}

import std.stdio;

void main()
{
writeln(contains([1, 2, 3], x => x == 2));
}

This doesn't compile with 2.058; the type of x in the lambda
expression cannot be deduced. Specifying the type explicitly works
fine.

This works:

bool contains(alias dg, T)(T[] arr)
{
foreach (i; arr)
if (dg(i))
return true;

return false;
}

import std.stdio;

void main()
{
writeln(contains!(x => x == 2)([1, 2, 3]));
}

Wasn't there supposed to be type inference for delegates passed as
regular parameters in 2.058?

Regards,
Alex


There is (try instantiating the template explicitly). The issue is that IFTI matching is performed independently on every parameter afaik.

Reply via email to