comparing pointers passed to and returned from funcs
Steven Schveighoffer
schveiguy at yahoo.com
Wed Mar 2 05:24:34 PST 2011
On Tue, 01 Mar 2011 18:11:00 -0500, bearophile <bearophileHUGS at lycos.com>
wrote:
> http://d.puremagic.com/issues/show_bug.cgi?id=5678
I think there is a general bug where any time the compiler uses an enum,
it simply replaces the expression declared for the enum.
So basically
enum TRUE = new DElement(true);
void main()
{
auto delem1 = TRUE;
auto delem2 = TRUE;
assert(delem1 is delem2); // fails
}
gets morphed into this:
void main()
{
auto delem1 = new Delement(true);
auto delem2 = new Delement(true);
assert(delem1 is delem2); // fails
}
Obviously this works great when the enum is a value type or a string
literal (which is created at compile time). However, it is not so great
for things like AAs, array literals, objects, or structs.
I think there are a few of these bugs in bugzilla, and there should be at
least a tracker, and if not, they should all be combined. This is a
serious problem in D, and really creates havoc (both performance-wise and
semantically). I don't anticipate there is an easy fix.
Essentially, I'd say enum is completely useless except for builtin types
and strings.
-Steve
More information about the Digitalmars-d-learn
mailing list