comparing pointers passed to and returned from funcs

spir denis.spir at gmail.com
Wed Mar 2 09:40:24 PST 2011


On 03/02/2011 02:24 PM, Steven Schveighoffer wrote:
> 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.

Thank you Steven & Bearophile. This solves my problem.
I first did not get Bearophile's answer about run/compile-time constants (I 
mean enums). I thought the time when they are created is irrelevant, isn't it?
Anyway, placing the constant defs inside a module's <static this () {...}> 
block does what I mean. It does, in fact, ensure *unicity*. But I don't really 
understand the relation with Steven's explanation above: why/how does the fact 
that a constant's def is inside static this() prevent the compiler to rewrite 
it like shown above? Also, I basically don't understand why dmd does that 
anyway: it's obviously un-ecological ;-)

Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d-learn mailing list