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?

Reply via email to