interface Foo
{
void foo ();
}
template FooImpl ()
{
void foo () {}
}
class FooClass // this needs a better name
{
mixin FooImpl;
}
interface Bar
{
void bar ();
}
template BarImpl ()
{
void bar () {}
}
class BarClass // this needs a better name
{
mixin BarImpl;
}
class FooBar : Foo, Bar
{
mixin FooImpl;
mixin BarImpl;
// since "foo" is overloaded we need to manually bring in "foo" in the
// overload set (or what it's called)
alias FooImpl.foo foo;
void foo (int a) {}
}