This is by design. Foo and A have different overload sets. Try:alias Foo.foo foo; http://dlang.org/template-mixin.html Search for: "Mixin Scope" and pay attention to:"Alias declarations can be used to overload together functions declared in different mixins".
Ahh this is what I was missing, many thanks.