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 [util.smartptr.shared] Status: C++17 Submitter: United States Opened: 2017-02-03 Last modified: 2020-09-06
Priority: Not Prioritized
View all other issues in [util.smartptr.shared].
View all issues with C++17 status.
Discussion:
Addresses US 124
Several shared_ptr related functions have wide contracts and cannot throw, so should be marked unconditionally noexcept.
Proposed change:
Add noexcept to:
template<class U> bool shared_ptr::owner_before(shared_ptr<U> const& b) const noexcept; template<class U> bool shared_ptr::owner_before(weak_ptr<U> const& b) const noexcept; template<class U> bool weak_ptr::owner_before(shared_ptr<U> const& b) const noexcept; template<class U> bool weak_ptr::owner_before(weak_ptr<U> const& b) const noexcept; bool owner_less::operator()(A,B) const noexcept; // all versions
[2017-02-20, Marshall adds wording]
[Kona 2017-02-27]
Accepted as Immediate to resolve NB comment.
Proposed resolution:
This wording is relative to N4640.
Modify 20.3.2.2 [util.smartptr.shared] as indicated:
template<class U> bool owner_before(const shared_ptr<U>& b) const noexcept; template<class U> bool owner_before(const weak_ptr<U>& b) const noexcept;
Modify 20.3.2.2.6 [util.smartptr.shared.obs] as indicated:
template<class U> bool owner_before(const shared_ptr<U>& b) const noexcept; template<class U> bool owner_before(const weak_ptr<U>& b) const noexcept;
Modify 20.3.2.4 [util.smartptr.ownerless] as indicated:
template<class T> struct owner_less<shared_ptr<T>> { bool operator()(const shared_ptr<T>&, const shared_ptr<T>&) const noexcept; bool operator()(const shared_ptr<T>&, const weak_ptr<T>&) const noexcept; bool operator()(const weak_ptr<T>&, const shared_ptr<T>&) const noexcept; }; template<class T> struct owner_less<weak_ptr<T>> { bool operator()(const weak_ptr<T>&, const weak_ptr<T>&) const noexcept; bool operator()(const shared_ptr<T>&, const weak_ptr<T>&) const noexcept; bool operator()(const weak_ptr<T>&, const shared_ptr<T>&) const noexcept; }; template<> struct owner_less<void> { template<class T, class U> bool operator()(const shared_ptr<T>&, const shared_ptr<U>&) const noexcept; template<class T, class U> bool operator()(const shared_ptr<T>&, const weak_ptr<U>&) const noexcept; template<class T, class U> bool operator()(const weak_ptr<T>&, const shared_ptr<U>&) const noexcept; template<class T, class U> bool operator()(const weak_ptr<T>&, const weak_ptr<U>&) const noexcept; using is_transparent = unspecified; };