When a class overloads a function from its super class, the overloaded function cannot be found by DMD. Example: ------------------- import std.stdio; public class A { public int X = 12; public void DoSomething(int x) { writeln(x); } } public class B: A { public void DoSomething() { DoSomething(X); } } void main() { auto b = new B(); b.DoSomething(); } ------------------- This code causes the compiler error: function OverloadBug.B.DoSomething() is not callable using types (int). You can work around the problem by using super.DoSomething(X) instead.
The name visibility rules follow that of C++ - names in the super class are not visible if any by that name in the derived class exist. To overload them together, add the line: alias A.DoSomething DoSomething;