class Base
{
void foo(string s){}
}
class Derived: Base
{
alias Base.foo foo;
void foo(long s){}
}
So far so good.
Now add new method to the Base class.
class Base
{
void foo(string s){}
void foo(int s){}
}
Now behavior of the calling code silently changes.