On Monday, 8 September 2025 at 14:42:01 UTC, evilrat wrote:

probably because you have declared nested function `add` inside `main`, this creates a delegate closure capturing `main` scope, if you don't want that just mark `add` static.

Marking add static works.

Still don't understand why this doesn't work.
```
import std.stdio;

void main()
{
        foo();
}

void foo() {
        int addMyInts(int lhs, int rhs) {
                return lhs + rhs;
        }

        int doSomething(int function(int, int) doer)
        {
                // call passed function
                return doer(5, 6);
        }

        doSomething(&addMyInts);
}
```

Console output
```
c:\dev\D\D_templates_tutorial\toy1\source\app.d(19): Error: function `doSomething` is not callable using argument types `(int delegate(int lhs, int rhs) pure nothrow @nogc @safe)`
    doSomething(&addMyInts);
               ^
c:\dev\D\D_templates_tutorial\toy1\source\app.d(19): cannot pass argument `&addMyInts` of type `int delegate(int lhs, int rhs) pure nothrow @nogc @safe` to parameter `int function(int, int) doer` c:\dev\D\D_templates_tutorial\toy1\source\app.d(13): `app.foo.doSomething(int function(int, int) doer)` declared here
    int doSomething(int function(int, int) doer)
        ^
```

Reply via email to