digitalmars.D - disable usage and design
- bearophile (31/31) Apr 27 2010 This is something I have already asked about in D.learn and the IRC chan...
This is something I have already asked about in D.learn and the IRC channel,
with no luck.
This D2 code used disable:
import std.c.stdio: puts;
class A {
void foo() { puts("A.foo()"); }
}
class B : A {
// disable override void foo(); // Linker error
disable override void foo() { puts("B.foo()"); }; // OK
}
class C : B {
override void foo() { puts("C.foo()"); };
}
void main() {
A b = new B;
b.foo(); // Output: B.foo()
B b2 = cast(B)b;
// Compile-time Output: Error: function test.B.foo is not callable because
it is annotated with disable
b2.foo();
C c = new C;
c.foo(); // Output: C.foo()
}
Is this how disable is supposed to work (or is it only partially implemented)?
Isn't disable override void foo(); more meaningful than giving a body to a
disabled function?
As you can see the first call to foo prints "B.foo()", that is calls the
disable method. Isn't a runtime exception better in this case?
Is overriding a disabled function meaningful?
Thank you,
bye,
bearophile
Apr 27 2010








bearophile <bearophileHUGS lycos.com>