Lambda cannot access frame of function

Ali Çehreli acehreli at yahoo.com
Sat Nov 18 14:34:13 UTC 2017


On 11/18/2017 06:22 AM, kerdemdemir wrote:
> //DMD64 D Compiler 2.072.2
> import std.stdio;
> 
> bool foo(  bool function( double ) controlFoo )
> {
>      return controlFoo(5.0);
> }
> 
> void foo2( double val )
> {
>      writeln  ( foo( a => a > val ) );
> }
> 
> void main()
> {
>      foo2(20);
>      writeln("Hello, World!");
> }
> 
> Does not compile and gives this errors:
> source_file.d(12): Error: function source.foo2.__lambda2 cannot access 
> frame of function source.foo2

foo should take 'delegate'.

If you want it to work with any callable entity, take the function as an 
alias template parameter:

bool foo(alias controlFoo)()
{
     return controlFoo(5.0);
}

void foo2( double val )
{
     writeln  ( foo!( a => a > val )() );
}

Ali


More information about the Digitalmars-d-learn mailing list