On 9/22/12, Jonathan M Davis <jmdavisp...@gmx.com> wrote:
> But why the compiler would now require that you do that, I
> don't know. If that's the way that thnigs currently are, it starts to become
> a bit odd that the base class functions aren't automatically available.

http://dlang.org/hijack.html

There's a good reason why, consider:

class Foo
{
    void foo(int) { }
}

class Bar : Foo
{
    alias super.foo foo;
    void foo(double) { }
}

void main()
{
    auto bar = new Bar;
    bar.foo(1);  // calls Foo.foo
}

Now let's say Foo is a library class and you upgrade to a new version
of the library without realizing that the base method was removed:

class Foo
{
}

class Bar : Foo
{
    alias super.foo foo;   // error
    void foo(double) { }
}

This now becomes a compile-time error. Without using the alias which
triggers the error the literal "1" would be implicitly converted to a
double and you'd end up invoking your own 'foo' method (which is no
longer an overload).

Reply via email to