On Wednesday, 5 February 2025 at 01:20:07 UTC, Jonathan M Davis
wrote:
Note that it talks about the "initial inferred return type",
whereas your function doesn't have an initial inferred return
type, because it fails to compile when determining the return
type. So, while the spec doesn't expand on what it's saying
here to give more detail, I'd say that it's definitely saying
that your lambda needs to compile and thus have an inferred
return type, and _then_ the context comes into play.
And honestly, I'm pretty sure that the entire intent of this
portion of the spec has to do with function pointers and not
about converting the return type when calling the function.
Thanks for the clarification. Indeed this compiles if we separate
function definition from its call :
``` D
I delegate() getI = () {
final switch("A")
{
case "A": return new A();
case "B": return new B();
}
};
I myI = getI();
```
But I guess the most readable form for my case is to simply avoid
inference :
``` D
I myI = delegate I() {
final switch("A")
{
case "A": return new A();
case "B": return new B();
}
}();
```