--- Comment #16 from Steven Schveighoffer <> 2012-03-26 
04:46:26 PDT ---
(In reply to comment #15)
> This is an answer to Walter to Bug 7783 :
> (In reply to comment #2)
> > In the absense of a user-defined opEquals for the struct, equality is 
> > defined
> > as a bitwise compare. This is working as expected. Not a bug.
> I agree, it's not a DMD implementation bug because here it's working as
> designed.

The statement above is not completely true:

struct S
    string x;
    bool opEquals(const ref S other) const
        return x == x;

struct T
    S s;
    // no user-defined opEquals

void main()
    T t1, t2;
    t1.s.x = "foobar".idup;
    t2.s.x = "foobar".idup;
    assert(t1 == t2);

This passes in 2.058.  Essentially, bitwise comparison is done unless a member
requires special case opEquals, in which case a generated opEquals function is
made for that struct.

I contend that for the compiler to defer to user-defined structs, but not to
builtin types on how to compare themselves is not only inconsistent, but leads
to endless boilerplate code.  It does not help anyone.

We have 'is', which does a bitwise compare.  There is no reason to make ==
duplicate that functionality.  For the rare cases where you actually *need*
bitwise comparison on arrays or floats, you can define a special opEquals.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to