Doubt about type Inference on templates

Antonio antoniocabreraperez at gmail.com
Thu Nov 23 21:27:20 UTC 2023


On Wednesday, 22 November 2023 at 19:37:58 UTC, Paul Backus wrote:

> This is a bug/limitation in the compiler. I couldn't find an 
> existing report on issues.dlang.org, so I've reported it myself 
> as [issue 24255][1].

Wow: It is a very concise bug example.

I tested with ```ldc``` ant it fails too.

>
> For now, I think the best way to work around it is to specify 
> the type in the lambda, as in `(int i) => i%2 == 0`.

agreed

>
> The reason you see `void` is that when the compiler cannot 
> figure out the type of a function literal, it treats it as a 
> template function:
>
> ```d
> static assert(__traits(isTemplate, i => i % 2 == 0));
> ```
>
> And for silly historical reasons, when the compiler tries to 
> determine the type of a template, it returns `void` instead of 
> giving an error:
>
> ```d
> template example() {}
> static assert(is(typeof(example) == void)); // what??
> ```

Thanks Paul!!!





More information about the Digitalmars-d-learn mailing list