On Tue, Nov 10, 2020 at 11:55 AM Max Samukha via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote:
> We can get the compile time equivalent of a member function's > address by applying '&' to the function in a static context: > > struct S { > void foo() {} > } > > enum pfoo = &S.foo; // ok > > void main() { > // now we can use the pointer to create, for example, a > delegate > S s; > void delegate() dg; > dg.ptr = &s; > dg.funcptr = pfoo; > dg(); > } > > However, we can't do that to a nested function: > > void main() { > void foo() { > } > enum pfoo = &foo; // weird kind of an enum delegate; > pfoo.funcptr can't be accessed at compile time. > } > > Is there a way to get a pointer to a non-static nested function? > non static nested function is a delegate, so you can just assign it to delegate like I have posted or you can du this: import std.stdio; void main() { void foo() { writeln("It works as expected"); } enum pfoo = &foo; void delegate() dg; dg.ptr = pfoo.ptr; dg.funcptr = pfoo.funcptr; dg(); }