On Friday, 15 September 2017 at 18:20:06 UTC, Jonathan M Davis
wrote:
It is my understanding that for both C and C++, an enum is
always an int (unless you're talking about enum classes in
C++). The size of an int can change based on your architecture,
but AFAIK, all of the architectures supported by D guarantee it
it be 32 bits in C/C++ (certainly, all of the architectures
supported by dmd do), and druntime would have serious issues if
it were otherwise, as it assumes all of the place that D's int
is the same as C/C++'s int.
It's certainly possible that my understanding of C/C++ enums is
wrong, but if it is, you'd basically be screwed when dealing
with any C functions that take an enum in any case that an enum
wasn't 32 bits - especially if the C/C++ compiler could choose
whatever size it wanted that fit the values.
- Jonathan M Davis
Not to hijack the thread, but is there anything about enums that
can't be done with a struct? The code below is just a simple
example that I'm sure I could complicate unnecessarily to
re-create much of the behavior of current enums with the syntax
of std.tuple.
I suppose what I'm wondering how E.B below is treated in the
writeln. With an enum, it would be a manifest constant. Does
static initialization of the struct do the same thing?
struct Enum(T)
{
T A;
T B;
}
static Enum!int E = {A:0, B:1};
void main()
{
import std.stdio : writeln;
writeln(E.B);
}