Если вы можете только изменить C, вы можете сделать что-то вроде:
class C: public B
{
explicit C(std::auto_ptr<A>& pA) : B(pA) {}
public:
static C *GetC()
{
std::auto_ptr<A> pA = GetA();
return new C(pA);
}
};
Проблема заключается в попытке привязать неконстантную ссылку к временному значению, возвращенному GetA
,Если вы можете сначала присвоить это переменной, у вас есть lvalue, и она работает нормально.
Как сказал Алекс B , сказал (удаленный ответ), если вы можете изменить B, это будетлучше взять этот auto_ptr
аргумент по значению;и если вы можете изменить компилятор, было бы лучше использовать unique_ptr
и вместо этого переместить семантику.