On Monday, 8 September 2025 at 14:32:32 UTC, Brother Bill wrote:
https://tour.dlang.org/tour/en/basics/delegatesThis is so simple. What is D complaining about? Should this also work with a Template, as shown? ``` import std.stdio; void main() { // auto add(T)(T lhs, T rhs) // { // return lhs + rhs; // } int add(int lhs, int rhs) { return lhs + rhs; } int doSomething(int function(int, int) doer) { // call passed function return doer(5, 6); } doSomething(&add); } ``` Console output: ```c:\dev\D\D_templates_tutorial\toy1\source\app.d(20): Error: function `doSomething` is not callable using argument types `(int delegate(int lhs, int rhs) pure nothrow @nogc @safe)`doSomething(&add); ^c:\dev\D\D_templates_tutorial\toy1\source\app.d(20): cannot pass argument `&add` 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(14): `app.main.doSomething(int function(int, int) doer)` declared hereint doSomething(int function(int, int) doer) ^ ```
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.
