class Base { public void Foo(A a) { writeln("Base.Foo(A a)"); }public void Foo(B a) { writeln("Base.Foo(B a)"); } };Compiler properly resolves forward references. Therefore, it's definitely a compiler bug, and the template version should be accepted.I filed the issue in bugzilla: https://issues.dlang.org/show_bug.cgi?id=14083 And will open a new pull request to fix compiler. Kenji Hara
In the mean time I've found removing the overridden methods from the Base class, works with templates.