using namespace boost;
class A {};
class B : public A {};
class X {
virtual shared_ptr<A> foo();
};
class Y : public X {
virtual shared_ptr<B> foo();
};
Върнатите типове не са ковариантни (нито, следователно, са законни), но биха били, ако вместо това използвах необработени указатели. Какъв е общоприетият идиом за заобикаляне на това, ако има такъв?