shared_ptr
, unique_ptr
, and rvalue references v2Section: 20.3.1.3 [unique.ptr.single], 20.3.2.2 [util.smartptr.shared] Status: C++11 Submitter: Stephan T. Lavavej Opened: 2010-01-23 Last modified: 2016-01-28
Priority: Not Prioritized
View other active issues in [unique.ptr.single].
View all other issues in [unique.ptr.single].
View all issues with C++11 status.
Discussion:
N3000 20.3.2.2 [util.smartptr.shared]/1 still says:
template <class Y, class D> explicit shared_ptr(const unique_ptr<Y, D>& r) = delete; template <class Y, class D> shared_ptr& operator=(const unique_ptr<Y, D>& r) = delete;
I believe that this is unnecessary now that "rvalue references v2" prevents rvalue references from binding to lvalues, and I didn't see a Library Issue tracking this.
[ 2010-02-12 Moved to Tentatively Ready after 5 positive votes on c++std-lib. ]
Proposed resolution:
Strike from 20.3.1.3 [unique.ptr.single]:
template <class T, class D = default_delete<T>> class unique_ptr { ... unique_ptr(const unique_ptr&) = delete;template <class U, class E> unique_ptr(const unique_ptr<U, E>&) = delete;unique_ptr& operator=(const unique_ptr&) = delete;template <class U, class E> unique_ptr& operator=(const unique_ptr<U, E>&) = delete;};
Strike from 20.3.2.2 [util.smartptr.shared]:
template<class T> class shared_ptr { ...template <class Y, class D> explicit shared_ptr(const unique_ptr<Y, D>& r) = delete;...template <class Y, class D> shared_ptr& operator=(const unique_ptr<Y, D>& r) = delete;... };