Cannot use UFCS in lambda?

berni someone at somemail.de
Sun Sep 16 09:46:15 UTC 2018


The following program does not compile:

>import std.stdio;
>import std.algorithm;
>
>struct A
>{
>    struct S
>    {
>        int x;
>    }
>
>    const bool foo(in S s, in int k)
>    {
>        return s.x<k;
>    }
>
>    void bar()
>    {
>        [S(1),S(2),S(3),S(4),S(5)].filter!(a=>a.foo(3)).writeln;
>    }
>}
>
>void main()
>{
>    A().bar();
>}

I get (using rdmd):

>test.d(18): Error: no property foo for type S
>/usr/include/dmd/phobos/std/algorithm/iteration.d(1108):        
>instantiated from here: >FilterResult!(__lambda1, S[])
>test.d(18):        instantiated from here: filter!(S[])

When I replace the UFCS-Syntax in the lambda by a function call 
it works:

> [S(1),S(2),S(3),S(4),S(5)].filter!(a=>foo(a,3)).writeln;

Where is my mistake?


More information about the Digitalmars-d-learn mailing list