| #ifndef INPUTS_MEMORY_H |
| #define INPUTS_MEMORY_H |
| |
| namespace std { |
| |
| inline namespace _1 { |
| |
| template <class Y> struct auto_ptr_ref { |
| Y *y_; |
| }; |
| |
| template <class X> class auto_ptr { |
| public: |
| typedef X element_type; |
| explicit auto_ptr(X *p = 0) throw() {} |
| auto_ptr(auto_ptr &) throw() {} |
| template <class Y> auto_ptr(auto_ptr<Y> &) throw() {} |
| auto_ptr &operator=(auto_ptr &) throw() { return *this; } |
| template <class Y> auto_ptr &operator=(auto_ptr<Y> &) throw() { |
| return *this; |
| } |
| auto_ptr &operator=(auto_ptr_ref<X> r) throw() { return *this; } |
| ~auto_ptr() throw() {} |
| auto_ptr(auto_ptr_ref<X> r) throw() : x_(r.y_) {} |
| template <class Y> operator auto_ptr_ref<Y>() throw() { |
| auto_ptr_ref<Y> r; |
| r.y_ = x_; |
| return r; |
| } |
| template <class Y> operator auto_ptr<Y>() throw() { return auto_ptr<Y>(x_); } |
| |
| private: |
| X *x_; |
| }; |
| |
| template <> class auto_ptr<void> { |
| public: |
| typedef void element_type; |
| }; |
| |
| } // namespace _1 |
| |
| } // end namespace std |
| |
| #endif // INPUTS_MEMORY_H |