Functions with lambdas cannot be @nogc as far as they allocates closures. And the way lambdas works is completely different from C++ way. In D using lambda we define how some part of "stack" frame allocates. So in some aspect
closure allocation is property of a function. So we need a way
to tell compiler how to handle this part of frame.
For exapmle:

void g() @nogc
{
    catch scope(void);
    int[N] arr = [/*...*/];
    arr[].sort!((a, b) => a > b);
}

Where "catch scope(void);" sets allocator for all lambdas. If it is void closure will be allocated on the stack. Once we will have allocators we
will be able to pass them as closure handlers.

Reply via email to