digitalmars.D.bugs - [Issue 10292] New: Warn against wrong class opEquals signature usage
- d-bugmail puremagic.com (49/49) Jun 07 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10292
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 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