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();
        }
    }();
```

Reply via email to