You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
```dimport std;struct button_{ int j; bool opCast(T:bool)(){ "casted".writeln; return up;//down; } bool down(){ assert(j==0,"called down on something not shift "~j.to!string); return true; } bool up(){ assert(0,"I thought I was calling down"); }}enum button{ shift=button_(0),down=button_(1)}unittest{ if(button.shift.down){ "shift was pressed".writeln; }}enum abc{a,b,c}unittest{ abc foo; foo=foo.a.b.c.c.b.a;//?????????}```
I expect the enum button to contain a reference of shift that I can then ask if its down
Instead, the shift has a sibling called down and that is the interpretation the compiler prefers; this needs a warning or an error
The text was updated successfully, but these errors were encountered:
I reduced the example a bit:
```Dstruct B{ int j; bool down() {return true;}}enum button{ shift = B(0), down = B(1), // without this line, it compiles}void main(){ // Error: struct `B` does not overload () if (button.shift.down()) {}}```
This is indeed very confusing, and a result of D allowing you to access static properties of a type using an instance of that type. I don't know if the specification says one of them is supposed to have priority.
crazymonkyyy reported this on 2023-06-09T17:45:54Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=23981
CC List
Description
The text was updated successfully, but these errors were encountered: