On Wed, 07 Jul 2010 14:38:09 -0400, Robert Jacques <[email protected]>
wrote:
On Wed, 07 Jul 2010 13:36:16 -0400, Jonathan M Davis
<[email protected]> wrote:
Consider the following:
interface A { final void foobar() { writeln("A"); } }
interface B { final void foobar() { writeln("B"); } }
class C : A, B {}
void main(string[] args) {
C c = new C;
c.foobar;
}
What does foobar print?
(This has been filed as bug 4435:
http://d.puremagic.com/issues/show_bug.cgi?id=4435)
I believe that per TDPL, you would have to call these with eithe
c.A.foobar() or
c.B.foobar() but that c.foobar() is not allowed. If it is allowed at
present,
it's definitely a bug. However, it's a bug in the implementation rather
than the
language spec.
- Jonathan M Davis
TDPL Page 215-216, mentions function hijacking of a final function by
the implementor, which is listed as an error and detected correctly.
Function hijacking of static functions by the implementor is not handled
correctly. It also specifically mentions that c.A.foobar() is not the
correct, nor ideal syntax. Indeed, it doesn't currently compile.
Since I forgot to mention it, c.foobar is the correct syntax.