interface Foo { public int foo(); } template fooImpl() { public override int foo() { return 4; } } class Goo : Foo { mixin fooImpl!(); public override int foo() { return 7; } } void main() { Foo f = new Goo; assert (f.foo == 7); } The above assert fails. Problem is the declaration order matters -- when the mixin comes AFTER the hand-coded foo(), it's fine.