There is a funny feature (or bug) in the D language: static alias this and static operator overloading.
For example
interface Foo { static { int value; void opAssign(int v) { value = v; } int get() { return value; } alias get this; } }
Now we can use type Foo as if it were an lvalue/rvalue:
Foo = 5; int a = Foo; int b = Foo + a;
I heavily use this feature in my MCU library. But it doesn't work inside conditionals:
if(Foo) {} // Error: type Foo is not an expression while(Foo) {} // Error: type Foo is not an expression
Even if we define `static opCast!bool()`. It doesn't help. Should this be fixed?