On Sunday, 25 November 2018 at 21:38:43 UTC, H. S. Teoh wrote:
Actually, I just thought of a way to do this with the existing
language: use a struct to simulate an enum:
struct E {
alias Basetype = int;
Basetype impl;
alias impl this;
enum a = E(1);
enum b = E(2);
version(Windows) {
enum c = E(3);
}
version(Posix) {
enum c = E(4);
enum d = E(100);
}
}
Heh, that can work in a pinch. Disgusting though :D
It's not 100% the same thing, but gets pretty close, e.g., you
can reference enum values as E.a, E.b, you can declare
variables of type E and pass it to functions and it implicitly
converts to the base type, etc..
There are some differences, like cast(E) won't work like an
enum...
It should, you can cast values of same sizeof to a struct.
and .max has to be manually declared, etc.. You'll also need to
explicitly assign values to each member, but for OS-dependent
enums you have to do that already anyway.
Yeah, those aren't a huge concern for that particular scenario.