Andrei: > That hidden functions are signaled during run time and not compile time > is a misunderstanding between design and implementation. There should > not be a HiddenFunc exception and the compiler should just refuse to > compile the program.
If you compile this program, derived from the OP one: import std.c.stdio: puts; class Foo { int x; bool opEquals(Foo other) { // wrong puts("running here."); return this.x == other.x; } } void main() { auto f1 = new Foo(); auto f2 = new Foo(); puts((f1 == f2) ? "==" : "!="); } With -w, it doesn't compile and gives the error: test.d(3): Error: class test.Foo object.Object.opEquals(Object o) is hidden by Foo That warning just needs to become an error message as soon as possible. See: http://d.puremagic.com/issues/show_bug.cgi?id=4216 It's in my list of about 20 very small changes that I'd like to see ASAP in D2. Bye, bearophile