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).
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18603 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB