www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10292] New: Warn against wrong class opEquals signature usage

http://d.puremagic.com/issues/show_bug.cgi?id=10292

           Summary: Warn against wrong class opEquals signature usage
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: diagnostic
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc


--- Comment #0 from bearophile_hugs eml.cc 2013-06-07 14:42:07 PDT ---
class Foo {
    int x;
    this(int x) {
        this.x = x;
    }
    bool opEquals(in Foo a) const {
        return a.x == this.x;
    }
}
void main() {
    Foo f1 = new Foo(10);
    Foo f2 = new Foo(10);
    assert(f1 != f2);
    assert(f1.opEquals(f2));
}


/*
This code compiles with no errors nor warnings with dmd 2.064alpha.

Expected something like:

test(6): Warning. Class opEquals should have signature like: override bool
opEquals(Object) const


Here a little more correct opEquals is:

    override bool opEquals(Object a) const {
        auto fooa = cast(Foo)a;
        if (fooa is null)
            return false;
        return fooa.x == this.x;
    }


The compiler needs to give warnings or errors for such cases of wrong
signatures. If you don't write opEquals(Object) it needs to complain. I think
the current situation of silent accepting wrong/useless special methods is not
acceptable in modern language.

(Code adapted from a post by "Namespace" in D.learn).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 07 2013