How to get address of a nested function?

Max Samukha maxsamukha at gmail.com
Wed Nov 11 10:51:41 UTC 2020


On Tuesday, 10 November 2020 at 20:13:30 UTC, Daniel Kozak wrote:

>
> 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();
> }

I need the funcptr at *compile time*, just as I can do "enum p = 
&S.foo" for a non-static member function.

I wrote "weird" not because '&' returns a delegate, but because I 
was surprised that we can have enum delegates at all, given that 
delegates carry a context pointer, which is not known at compile 
time. That is, the enum delegate appears to be some kind of alias 
of the '&' expression.

Not that the issue is critical, but it makes a library I am 
writing incomplete.


More information about the Digitalmars-d-learn mailing list