Я полагаю, что в этом фрагменте кода, извлеченном из книги Страуступа, на ее странице 368 есть опечатка:
template <class X> class std::auto_ptr
{
template <class Y> struct auto_ptr_ref { /* ... */ }; // helper class
X * ptr;
public :
typedef X element_type;
explicit auto_ptr(X* p =0) throw() { ptr = 0; }
auto_ptr (auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; } // note: not const auto_ptr&
/* ... */
};
В случае, если не
explicit auto_ptr(X* p =0) throw() { ptr = 0; }
быть
explicit auto_ptr(X* p =0) throw() { ptr = p; }
вместо?