templated overload of opAssign

Paul Backus snarwin at gmail.com
Mon Apr 5 21:50:32 UTC 2021


On Saturday, 3 April 2021 at 13:46:17 UTC, kdevel wrote:
> Why does this code
>
> [...]
> ```d
>    ec.opAssign (bar (1)); // okay
> //   ec = bar (1); // Error: expression bar(1) is void and has 
> no value
> ```
> [...]
>
> compile with the abovementioned error?

This is a compiler bug. You're not allowed to have a `void` 
expression on the right-hand side of an assignment, but you are 
allowed to pass a `void` expression to a function that takes a 
`lazy` parameter. Currently, the compiler checks for errors 
before rewriting the assignment to an `opAssign` call, which 
means that it will issue an error even in cases where the rewrite 
would have worked. What it should do instead is rewrite the 
assignment first, and *then* check for errors.


More information about the Digitalmars-d-learn mailing list