On Wednesday, 29 January 2014 at 15:30:38 UTC, Martin Cejp wrote:

You cannot override the static method because it isn't in the vtable and has a different calling convention; no this pointer is passed.

Technically, yes, there would need to be two methods generated because of ABI differences, but this could be done behind the scenes. By making a method both override and static, you'd tell the compiler to do exactly that. Of course, the question is whether this would really be worth implementing and based on the reactions so far, I guess the answer is Not at all. I'm surprised that nobody else misses this feature, though.

So you want to overload the static method. Well you can do that (untested but should work):
---

class A {
    static void f() {writeln(__PRETTY_FUNCTION__);}
}
class B : A {
    void f() {writeln(__PRETTY_FUNCTION__);}
}
class C : B {
   // Overrides from B, overloads from A
    override void f() {writeln(__PRETTY_FUNCTION__);}
}
void main () {
 auto b= new B();
 auto c = new C();

 A.f();
 b.f();

 c.f();
}
---
Is this what you're trying to do?

IMO though overloading base class methods should be avoided

Cheers,
ed

Reply via email to