struct A {
virtual ~A();
virtual A * f();
...
};
struct B : public A {
virtual B * f();
...
};
Различные типы возврата двух функций f() называются ковариантными. Старые версии С++ требовали, чтобы возвращаемые типы были одинаковыми, поэтому B должен выглядеть следующим образом:
struct B : public A {
virtual A * f();
...
};
Итак, мой вопрос: есть ли у кого-нибудь реальный пример, где требуются ковариантные типы возвращаемых виртуальных функций или выработка превосходного решения для простого возврата базового указателя или ссылки?