Section: 20.3.2.2.8 [util.smartptr.shared.cmp] 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.cmp].
View all issues with C++17 status.
Discussion:
Addresses US 135The less-than operator for shared pointers compares only those combinations that can form a composite pointer type.
With the C++17 wording for the diamond functor, less<>
, we should be able to support comparison of a wider
range of shared pointers, such that less<>::operator(shared_ptr<A>, shared_ptr<B>)
is consistent
with less<>::operator(A *, B *)
.
Proposed change: Replace less<V>
with just less<>
, and drop the reference to composite
pointer types.
[2017-03-02, Kona, STL comments and provides wording]
We talked about this in LWG, and I talked to Alisdair. The status quo is already maximally general (operator less-than in Core always forms a composite pointer type), but we can use diamond-less to significantly simplify the specification. (We can't use less-than directly, due to the total ordering issue, which diamond-less was recently "upgraded" to handle.)
[Kona 2017-03-02]
Accepted as Immediate to resolve NB comment.
Proposed resolution:
This wording is relative to N4640.
Change 20.3.2.2.8 [util.smartptr.shared.cmp] as depicted:
template<class T, class U> bool operator<(const shared_ptr<T>& a, const shared_ptr<U>& b) noexcept;-2- Returns:
less<
V>()(a.get(), b.get()), where.V
is the composite pointer type (Clause 5) ofshared_ptr<T>::element_type*
andshared_ptr<U>::element_type*