On Monday, 8 September 2025 at 16:23:23 UTC, Brother Bill wrote:
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.

The easiest thing to do here is to declare it static, so the compiler will reject any requirement of a context pointer.

I believe the case where it will infer a function vs. delegate is when passing a literal lambda. Other than that, you have to be explicit.

```d
void main() {
   int foo1() { return 1; }
   static int foo2() { return 1; }
   int function() p;
   p = &foo1; // error
   p = &foo2; // ok
p = () { return 1; }; // ok, inferred to be a function, not delegate
}
```

-Steve

Reply via email to