More bugs...
Timon Gehr
timon.gehr at gmx.ch
Tue May 1 03:33:50 PDT 2012
On 05/01/2012 04:02 AM, Mehrdad wrote:
> Wha..?!
>
> I can't believe delegates work so poorly in D...
It is not the delegates, it is the type deduction algorithm for implicit
function template instantiation. The issue is that the parameters do not
cross-talk, which means R is not known during matching: How to detect
the argument type from bool delegate(ElementType!R) alone if R is not
known? The obvious solution would be to use an actual inference
algorithm that uses information that can be gained from other parameters
as well as information already known from the current parameter.
You might want to file an enhancement request, because this exact thing
seems to trip up many programmers. (i.e. it would be a lot more
intuitive and convenient if it worked.)
> they're practically
> unusable unless you're passing them as template parameters (which brings
> on its own set of bugs)...
I haven't encountered those so far.
>
> Seems like every time I try to escape a bug somehow, another one pops up :(
>
The situation is improving. Furthermore, there is a very large subset of
the language that is already very usable.
Another way to make your code compile:
private import std.range;
void filter(R,S)(R, bool delegate(S)) if(is(S==ElementType!R)){ }
void main() { [1, 2, 3].filter((int x) { return x < 3; }); }
More information about the Digitalmars-d
mailing list