[Issue 1610] New: Enum.stringof is int, not the name of the enum
Ary Manzana
ary at esperanto.org.ar
Wed Oct 24 08:13:26 PDT 2007
d-bugmail at puremagic.com escribió:
> http://d.puremagic.com/issues/show_bug.cgi?id=1610
>
> Summary: Enum.stringof is int, not the name of the enum
> Product: D
> Version: 2.007
> Platform: PC
> OS/Version: Linux
> Status: NEW
> Severity: normal
> Priority: P2
> Component: DMD
> AssignedTo: bugzilla at digitalmars.com
> ReportedBy: andrei at metalanguage.com
>
>
> import std.stdio;
> enum ABC { a, b, c }
> void main() { writeln(ABC.stringof); } // prints "int"
>
> This causes major issues in reflective and serialization code. The .stringof
> should evaluate to the name of the enum, e.g. "ABC".
>
>
lol, I just discovered the same thing yesterday.
I found out you can also do this:
void foo() {
int x = typeof(ABC).a; // same as ABC.a
int y = typeof(ABC).init; // y = 0
}
The compiler also allows me to do this:
enum ABCInit {
a, b, c, init
}
Now if I do:
void foo() {
int y = typeof(ABC).init; // y = 3
}
So an addition of a field "init" could potentialy and silently introduce
bugs in the application. Although I think it's rare that someone would
want to define an "init" property for an enum type (or for a class, or
struct), I think the compiler should disallow this (same behaviour as
trying to redefine the "sizeof", "alignof", etc., properties).
More information about the Digitalmars-d-bugs
mailing list