[Issue 10292] New: Warn against wrong class opEquals signature usage
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Jun 7 14:42:08 PDT 2013
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 at puremagic.com
ReportedBy: bearophile_hugs at eml.cc
--- Comment #0 from bearophile_hugs at 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: -------
More information about the Digitalmars-d-bugs
mailing list