From: Benjamin Kosnik Date: Tue, 4 Jul 2000 01:21:24 +0000 (+0000) Subject: std_memory.h: Revert. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f647814cefff8ee95ac918a8484d5da8c415825;p=platform%2Fupstream%2Fgcc.git std_memory.h: Revert. 2000-07-03 Benjamin Kosnik * bits/std_memory.h: Revert. From-SVN: r34858 --- diff --git a/libstdc++-v3/bits/std_memory.h b/libstdc++-v3/bits/std_memory.h index e31634d..5ee126b 100644 --- a/libstdc++-v3/bits/std_memory.h +++ b/libstdc++-v3/bits/std_memory.h @@ -25,28 +25,19 @@ __STL_BEGIN_NAMESPACE -#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS -# if defined(__SGI_STL_USE_AUTO_PTR_CONVERSIONS) && \ - defined(__STL_MEMBER_TEMPLATES) - -template class auto_ptr_ref { - template friend class auto_ptr; - _Tp* _M_ptr; - void*& _M_ptr_ref; - explicit auto_ptr_ref(_Tp* __p, void*& __r) __STL_NOTHROW - : _M_ptr(__p), _M_ptr_ref(__r) {} - _Tp* _M_release() const __STL_NOTHROW { - _M_ptr_ref = 0; - return _M_ptr; - } +#if defined(__SGI_STL_USE_AUTO_PTR_CONVERSIONS) && \ + defined(__STL_MEMBER_TEMPLATES) + + template struct auto_ptr_ref { + _Tp1* _M_ptr; + auto_ptr_ref(_Tp1* __p) : _M_ptr(__p) {} }; -# endif /* auto ptr conversions && member templates */ -#endif /* _GLIBCPP_RESOLVE_LIB_DEFECTS */ +#endif template class auto_ptr { private: - void* _M_ptr; + _Tp* _M_ptr; public: typedef _Tp element_type; @@ -55,10 +46,8 @@ public: auto_ptr(auto_ptr& __a) __STL_NOTHROW : _M_ptr(__a.release()) {} #ifdef __STL_MEMBER_TEMPLATES - template auto_ptr(auto_ptr<_Tp1>& __a) __STL_NOTHROW { - _Tp* const __tmp = __a.release(); // Must have implicit conversion - _M_ptr = __tmp; - } + template auto_ptr(auto_ptr<_Tp1>& __a) __STL_NOTHROW + : _M_ptr(__a.release()) {} #endif /* __STL_MEMBER_TEMPLATES */ auto_ptr& operator=(auto_ptr& __a) __STL_NOTHROW { @@ -78,24 +67,23 @@ public: // specification here, but omitting it is standard conforming. Its // presence can be detected only if _Tp::~_Tp() throws, but (17.4.3.6/2) // this is prohibited. - ~auto_ptr() { delete this->get(); } + ~auto_ptr() { delete _M_ptr; } _Tp& operator*() const __STL_NOTHROW { - return this->get(); + return *_M_ptr; } _Tp* operator->() const __STL_NOTHROW { - return static_cast<_Tp*>(_M_ptr); + return _M_ptr; } _Tp* get() const __STL_NOTHROW { - return static_cast<_Tp*>(_M_ptr); + return _M_ptr; } _Tp* release() __STL_NOTHROW { - _Tp* const __tmp = this->get(); + _Tp* __tmp = _M_ptr; _M_ptr = 0; return __tmp; } void reset(_Tp* __p = 0) __STL_NOTHROW { - _Tp* const __tmp = this->get(); if (__p != _M_ptr) { delete _M_ptr; _M_ptr = __p; @@ -110,35 +98,23 @@ public: #if defined(__SGI_STL_USE_AUTO_PTR_CONVERSIONS) && \ defined(__STL_MEMBER_TEMPLATES) -# ifndef _GLIBCPP_RESOLVE_LIB_DEFECTS -private: - template struct auto_ptr_ref { - _Tp1* _M_ptr; - void*& _M_ptr_ref; - explicit auto_ptr_ref(_Tp1* __p, void*& __r) __STL_NOTHROW - : _M_ptr(__p), _M_ptr_ref(__r) {} - _Tp1* _M_release() const __STL_NOTHROW { - _M_ptr_ref = 0; - return _M_ptr; - } - }; -# endif /* !_GLIBCPP_RESOLVE_LIB_DEFECTS */ - public: auto_ptr(auto_ptr_ref<_Tp> __ref) __STL_NOTHROW - : _M_ptr(__ref._M_release()) {} - -# ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS + : _M_ptr(__ref._M_ptr) {} + auto_ptr& operator=(auto_ptr_ref<_Tp> __ref) __STL_NOTHROW { - reset(__ref._M_release()); - return *this; + if (__ref._M_ptr != this->get()) { + delete _M_ptr; + _M_ptr = __ref._M_ptr; + } + return *this; } -# endif /* _GLIBCPP_RESOLVE_LIB_DEFECTS */ - - template operator auto_ptr_ref<_Tp1>() __STL_NOTHROW - { return auto_ptr_ref<_Tp1>(this->get(), _M_ptr); } + + template operator auto_ptr_ref<_Tp1>() __STL_NOTHROW + { return auto_ptr_ref<_Tp>(this->release()); } template operator auto_ptr<_Tp1>() __STL_NOTHROW - { return auto_ptr<_Tp1>(this->release()); } + { return auto_ptr<_Tp1>(this->release()); } + #endif /* auto ptr conversions && member templates */ };