June 07, 2013 [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: ------- |
Copyright © 1999-2021 by the D Language Foundation