namespace std { template class __shared_ptr { protected: __shared_ptr(); __shared_ptr(type *ptr); ~__shared_ptr(); public: type &operator*() { return *ptr; } type *operator->() { return ptr; } type *release(); void reset(); void reset(type *pt); private: type *ptr; }; template class shared_ptr : public __shared_ptr { public: shared_ptr(); shared_ptr(type *ptr); shared_ptr(const shared_ptr &t); shared_ptr(shared_ptr &&t); ~shared_ptr(); shared_ptr &operator=(shared_ptr &&); template shared_ptr &operator=(shared_ptr &&); }; } // namespace std