[util.smartptr.ownerless] (original) (raw)

The class template owner_less allows ownership-based mixed comparisons of shared and weak pointers.

namespace std { template<class T = void> struct owner_less;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;};}

operator()(x, y) returns x.owner_before(y).

[Note 1:

Note that

— _end note_]