Re: Lambda cannot access frame of function
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
Re: Lambda cannot access frame of function
On Saturday, 18 November 2017 at 14:22:19 UTC, kerdemdemir wrote: bool foo( bool function( double ) controlFoo ) Change that `function` to `delegate` and it should work. Function pointers aren't allowed to access other locals, but delegates are.
Re: Lambda cannot access frame of function
On Saturday, 18 November 2017 at 14:30:29 UTC, Adam D. Ruppe wrote: On Saturday, 18 November 2017 at 14:22:19 UTC, kerdemdemir wrote: bool foo( bool function( double ) controlFoo ) Change that `function` to `delegate` and it should work. Function pointers aren't allowed to access other locals, but delegates are. Yes it worked as you suggested. Thanks.
Lambda cannot access frame of function
//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 source_file.d(12): Error: function source.foo (bool function(double) controlFoo) is not callable using argument types (void) Live example: http://rextester.com/WRKCWR55408 Is there any workaround for that? Regards Erdem