У меня есть класс AP
template<typename T>
class AP : public std::auto_ptr<T>
{
typedef std::auto_ptr<T> Super;
public:
AP() : Super() { }
AP(T* t) : Super(t) { }
AP(AP<T>& o) : Super(o) { }
};
и функция для его возврата.
namespace AIR {
namespace Tests {
namespace
{
AP<A> CreateGraph()
{
AP<A> top(A::Create("xyz").release());
...
return top;
}
AP<A> top;
top = CreateGraph();
Когда я компилирую код
AP<A> top;
top = CreateGraph();
Я получил это сообщение об ошибке
no match for ‘operator=’ in ‘top = AIR::Tests::<unnamed>::CreateGraph()()’
Я добавил этот оператор в класс AP, но он не 'т работа.
AP<T>& operator=(AP<T>& o) { (*(Super*)this) = o; return *this; }
Что не так с классом?
РЕДАКТИРОВАТЬ
top.reset(CreateGraph().release())
решил эту проблему.