On 9/22/12, Andrej Mitrovic <andrej.mitrov...@gmail.com> wrote: > using the alias
But I do think this can be further improved in the language. Take this for example: import std.stdio; class Foo { void meth(double) { writeln("Foo.meth"); } } class Bar : Foo { alias super.meth meth; void meth(int) { writeln("Bar.meth"); } } class Doo : Bar { alias super.meth meth; void meth(long) { writeln("Doo.meth"); } } void main() { auto doo = new Doo; doo.meth(1); // calls Bar.meth } Now let's say the Doo clas removes the meth overload and the alias: class Foo { void meth(double) { writeln("Foo.meth"); } } class Bar : Foo { // gone } class Doo : Bar { alias super.meth meth; void meth(long) { writeln("Doo.meth"); } } void main() { auto doo = new Doo; doo.meth(1); // now calls Doo.meth } We might have wanted the "super alias" in Doo to only work against the Bar base class so the compiler can notify us if Doo.meth is removed. The language doesn't have a way to warn us of this. I would prefer if "super.alias" meant to take overloads of all base classes into account and that we could use "ClassName.alias" to only import the overload set of a specific base class. That way this would trigger a CT error: class Foo { void meth(double) { writeln("Foo.meth"); } } class Bar : Foo { } class Doo : Bar { alias Bar.meth meth; // error: no overload set in Bar void meth(long) { writeln("Doo.meth"); } }