On Friday, 10 August 2018 at 09:57:53 UTC, learnfirst1 wrote:


import core.stdc.stdio;

struct Test {
        string name ;
}

void T(alias pred, A...)(){
        __gshared t = Test(A) ;
         pred(t);
}

extern(C) void main(){
T!(t => printf("test 1 name = %s\n".ptr, t.name.ptr), "test") ; // build OK
        T!(t => {
                printf("test 2 name = %s\n".ptr, t.name.ptr);
        }, "test") ; // build error
}

--------------

The arrow syntax doesn't work for multi-line lambdas; you need to write them using what the spec calls "function literal" syntax [1]:

    T!((t) { // <- Parens around the argument, no arrow
        printf("test 2 name = %s\n".ptr, t.name.ptr);
    }, "test") ;

[1] https://dlang.org/spec/expression.html#function_literals

Reply via email to