On Monday, 20 November 2023 at 16:09:33 UTC, Antonio wrote:
Is there any way to force D compiler to treat this
"createCounter" declaration as **delegate** instead of
**function**?
```d
auto createCounter = (int nextValue) => () => nextValue++;
```
generally there is a way to tell the compiler specifically that
you want a delegate or a function, and additionally there is
`toDelegate` function from std.functional that could be useful in
some cases.
https://dlang.org/phobos/std_functional.html#toDelegate
the syntax for specifying delegate/function is smth like this,
IIRC return type can be omitted but for reference I write it here
as auto.
```d
// this is a function returning a delegate
auto createCounter(int nextValue) => auto delegate() =>
nextValue++;
// this is a function returning a function
auto createCounter(int nextValue) => auto function() =>
nextValue++;
```