On Thursday, 4 July 2013 at 13:23:23 UTC, CJS wrote:
Thanks for the detailed answer!

Just to clarify: So if f is an inner function then &f will be a delegate even if it doesn't reference anything in the environment in which it was defined? (i.e. even if it could have been typed as a function?)

That is correct. Unless the inner function is static. I had actually forgotten about this until I just looked it up in the docs[1]. Taking the address of a static inner function will give you a function pointer rather than a delegate.

void foo() {
   static int f() { return 10; }
   int g() { return 20; }

   iTakeAFuncPtr( &f );
   iTakeADelegate( &g );
}

In which case you can modify static local variables:

import std.stdio;
void foo( int function( int ) fp ) {
    writeln( fp( 5 ));
}

void main() {
    static int k = 10;

    static int mult( int i ) { return i*10; }
    foo( &mult );
}

[1] http://dlang.org/function.html

Reply via email to