functors with template lambdas
weaselcat via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 15 19:06:44 PDT 2015
On Saturday, 16 May 2015 at 02:04:39 UTC, Vlad Levenfeld wrote:
> I think this code should be allowed, but it isn't:
>
> struct Functor (T)
> {
> T a;
>
> auto ref fmap (alias f)()
> {
> return Functor (f(a));
> }
> }
>
> auto ref identity (T)(auto ref T a)
> {
> return a;
> }
>
> void main()
> {
> Functor!int a;
>
> static auto id (T)(T x)
> {return x;}
>
> a.fmap!identity; // ok
>
> a.fmap!id; // ok
>
> a.fmap!((int x) => x); // ok
>
> a.fmap!(x => x); // Error: template instance fmap!((x) => x)
> cannot use local '__lambda1' as parameter to non-global
> template fmap(alias f)()
> }
>
> This seems like one of those things that doesn't work because
> of some compiler implementation detail rather than a
> consequence of the language rules but I'm not sure. Opinion?
very long standing compiler bug
https://issues.dlang.org/show_bug.cgi?id=3051
More information about the Digitalmars-d-learn
mailing list