Pattern matching as a library

Simen Kjaeraas via Digitalmars-d digitalmars-d at puremagic.com
Sun Mar 13 11:38:24 PDT 2016


On Sunday, 13 March 2016 at 02:33:49 UTC, Simen Kjaeraas wrote:
> http://dpaste.dzfl.pl/7360ee90b344

Dammit, 3:30AM was apparently too late, and some bad code leaked 
through. I managed to sidestep a problem by writing nonsense 
code. The problem I get can be reduced to this:

struct S {
     void foo(alias a)() {}
}

unittest {
     S s;
     s.foo!((int i) => 1); // Works
     s.foo!(i => 1); // Fails
}

Result:
foo.d(8): Error: template instance foo!((i) => 1) cannot use 
local '__lambda1' as parameter to non-global template foo(alias 
a)()

Bah. It's in bugzilla as bug 5710[1] (with the most discussion), 
3051, 3052, 11098, 12285, 12576 and 15564, and has a $150 bounty 
on bountysource:
https://www.bountysource.com/issues/1375082-cannot-use-delegates-as-parameters-to-non-global-template

Maybe it's time I learnt how DMD is put together and earn $150...


Now, there's a way to work around that, by putting the lambda in 
an intermediate type. Sadly, that runs afoul of bug 15794[2] for 
the typed lambda, so I'm stumped for now.

[1]: https://issues.dlang.org/show_bug.cgi?id=5710
[2]: https://issues.dlang.org/show_bug.cgi?id=15794


More information about the Digitalmars-d mailing list