On Thursday, 30 June 2022 at 09:19:15 UTC, bauss wrote:
> On Thursday, 30 June 2022 at 09:08:30 UTC, Ogi wrote:
> ... But for some reason it’s not the case with enums. ...
enum Color { red, orange = 3 }
int orange = 1;
Color color = orange;
// what is color?
// or what about
auto color = orange;
// What is color?
// or this:
auto color = cast(int)orange;
// What is color?
Arguably each of these can be defined behavior and can be solved, but what defined behavior is correct depends entirely on what people expect to be true, and that's very different depending on the type of project(s) people work on, what language background they come from etc.
For me the first one will be 1, because I believe a defined value should override an enum value if specified, but this may be different from others.
The second one is the same, the type should be int and not Color.
The third one has the type int as well and will obviously use the int variable named orange in my expectation.
However I can see the argument for other people wanting the first one to be a compiler error because it's ambiguous, or even that you cannot override enum values and thus it will take the value from Color.
All of these behavior are correct and neither is wrong, as it all just depends on how one think about programming in terms of types, values, rules etc.
I don't think D could ever settle on a single rule here that a majority would agree upon.
the goal is not to copy c/c++, it's to be smarter, they are not globals
> enum Color { red, orange = 3 }
> int orange = 1;
> Color color = orange;
// what is color?
it's not .orange
therefore it is your variable, it if were with the dot, it'd take what ever is in the enum
> auto color = orange;
// What is color?
same, it's not .orange
therefore it's 1, if it where with the dot, it's compile error telling you to be more explicit
> auto color = cast(int)orange;
// What is color?
it's not .orange
therefore it is your variable, it if were with the dot, it'd take what ever is in the enum, then apply the cast
I don't know it seems pretty obvious to me
This feature is too good to not have