_>Извините, но вы не правы. Это называется ковариантными типами возращаемых значений. С++ это поддерживает. В этом месте проблеммы нет.
_>(Компилятор ворнинга не выдает
)
Да, в самом деле, getSelf для потомков перегружают Base::getSelf. Не знал про такую фичу

Но все равно, вы хотите, чтобы компилятор сделал выброр между функциями Tester::Test(Derived1*) и Tester::Test(Derived2*) на основании типа, который вернет функция getSelf, а этот тип будет известен только во время выполнения. В данном случае, видимо, значение, возвращаемое pBase1->getSelf(), неявно статически приводится к Base*, а потом компилятор не может привести Base* к Derived1* или Derived2*, поэтому и сообщает об ошибке.