On Friday, 12 September 2025 at 12:23:21 UTC, Nick Treleaven wrote:
On Friday, 12 September 2025 at 09:17:10 UTC, realhet wrote:
On Friday, 12 September 2025 at 08:44:47 UTC, Stefan Koch wrote:
On Friday, 12 September 2025 at 08:36:42 UTC, realhet wrote:

I did a complete 'martix' of these combinations and accidentally found the way how I did it already in the past. Actually my things were changed, it's not related to the DMD/LDC version, sorry for the false suspection.

So the solution is to put the mixin(expr) into a () and then the expression it will act BOTH an expression with a return value and a statement with unused return value.

import std;

```d
void main() {
  enum expr = `(){return 4;}()`; //expression

  (){return 4;}()       ;   //<- works
  auto x = mixin(expr)  ;   //<- works
  auto y = (mixin(expr));   //<- works
//mixin(expr)           ;   //<- fails. mixin expects statement
  (mixin(expr))         ;   //<- THIS IS THE WHEY! :D
}
```
note: The expressio must be a lambda, othewise the compiler will detect no side effects and refuse to use it as a statement.

(x); <- Is not a construct that comes to my mind as useful, but this was it. This forces the mixin to expect an expression and not a statement.

Thank You all to for the help!


Reply via email to