Я бы сказал, что это противоречит цели полиморфизма, потому что когда вы пишете функцию, которая принимает полиморфный тип, производный тип должен одинаково хорошо с ним работать:
void fun(A* a){
a->somemethod();
}
...
A* a = new B();
fun(a); // Shouldn't this work?!
// According to Liskov Principle, you are doing it wrong!
// but really who cares, it depends on your justification
// of a solution to the the problem at hand.
ИМХО, это зависит отконкретную проблему, которую вы пытаетесь решить, потому что я не верю в «всегда» успешную «лучшую практику».