This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++17 status.
Section: 20.3.2.2.2 [util.smartptr.shared.const] Status: C++17 Submitter: Jonathan Wakely Opened: 2015-05-05 Last modified: 2017-07-30
Priority: 0
View other active issues in [util.smartptr.shared.const].
View all other issues in [util.smartptr.shared.const].
View all issues with C++17 status.
Discussion:
20.3.2.2.2 [util.smartptr.shared.const] includes several "Exception safety" elements, but that is not one of the elements defined in 17.5.1.4 16.3.2.4 [structure.specifications]. We should either define what it means, or just move those sentences into the Effects: clause.
[2015-06, Telecon]
Move to Tentatively Ready.
Proposed resolution:
This wording is relative to N4431.
Change 20.3.2.2.2 [util.smartptr.shared.const] as follows:
template<class Y> explicit shared_ptr(Y* p);[…]
-4- Effects: Constructs ashared_ptr
object that owns the pointerp
. If an exception is thrown,delete p
is called. […]-7- Exception safety: If an exception is thrown,delete p
is called.template <class Y, class D> shared_ptr(Y* p, D d); template <class Y, class D, class A> shared_ptr(Y* p, D d, A a); template <class D> shared_ptr(nullptr_t p, D d); template <class D, class A> shared_ptr(nullptr_t p, D d, A a);[…][…]
-9- Effects: Constructs ashared_ptr
object that owns the objectp
and the deleterd
. The second and fourth constructors shall use a copy ofa
to allocate memory for internal use. If an exception is thrown,d(p)
is called. […]-12- Exception safety: If an exception is thrown,d(p)
is called.template <class Y> explicit shared_ptr(const weak_ptr<Y>& r);[…]
-24- Effects: Constructs ashared_ptr
object that shares ownership withr
and stores a copy of the pointer stored inr
. If an exception is thrown, the constructor has no effect. […]-27- Exception safety: If an exception is thrown, the constructor has no effect.template <class Y, class D> shared_ptr(unique_ptr<Y, D>&& r);[…]
-29- Effects: Equivalent toshared_ptr(r.release(), r.get_deleter())
whenD
is not a reference type, otherwiseshared_ptr(r.release(), ref(r.get_deleter()))
. If an exception is thrown, the constructor has no effect.-30- Exception safety: If an exception is thrown, the constructor has no effect.