namespace std { // Вспомогательный тип, используемый при копировании и присваивании template struct auto_ptr_ref {}; template class auto_ptr { public: // Тип значения typedef T element_type; // Конструктор explicit auto_ptr(T* ptr = 0) throw(); // Копирующие конструкторы (с неявным преобразованием типа) // Обратите внимание - параметр объявлен неконстантным! auto_ptr(const auto_ptr&) throw(); template auto_ptr(auto_ptr&) throw(); // Присваивание (с неявным преобразованием типа) // Обратите внимание - параметр объявлен неконстантным! auto_ptr& operator= (auto_ptr&) throw(); template auo_ptr& operator= (auto_ptr&) throw(); // Деструктор ~auto_ptr() throw(); // Обращение по указателю T* get() const throw(); T& operator*() const throw(); T* operator->() const throw(); // Освобождение принадлежащего объекта T * release ()throw(); // Повторная инициализация void reset(T* ptr = 0) throw(); // Специальные преобразования, // используемые при копировании и присваивании public: auto_ptr(auto_ptr_ref) throw(); auto_ptr& operator= (auto_ptr_ref rhs) throw(); template operator auto_ptr_ref() throw(); template operator auto_ptr () throw(); }; }