This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.
Section: 17.11.6 [cmp.alg] Status: C++20 Submitter: Canada Opened: 2019-11-06 Last modified: 2021-02-25
Priority: 0
View other active issues in [cmp.alg].
View all other issues in [cmp.alg].
View all issues with C++20 status.
Discussion:
Addresses CA 178
std::strong_order, weak_order, and partial_order have special cases for floating point, but are missing special casing for pointers. compare_three_way and std::less have the special casing for pointers.
Proposed change:
Change [cmp.alg] bullet 1.4 from
"Otherwise, strong_ordering(E <=> F) if it is a well-formed expression."
to
"Otherwise, strong_ordering(compare_three_way()(E, F)) if it is a well-formed expression."
Change [cmp.alg] bullet 2.4 from
"Otherwise, weak_ordering(E <=> F) if it is a well-formed expression."
to
"Otherwise, weak_ordering(compare_three_way()(E, F)) if it is a well-formed expression."
Change [cmp.alg] bullet 3.3 from
"Otherwise, partial_ordering(E <=> F) if it is a well-formed expression."
to
"Otherwise, partial_ordering(compare_three_way()(E, F)) if it is a well-formed expression."
Dietmar Kühl:
Use compare_three_way instead of <=> for the various comparison algorithms.
[2019-11 Status to Ready during Wednesday night issue processing in Belfast.]
Proposed resolution:
This wording is relative to N4835.
Change 17.11.6 [cmp.alg] as indicated:
-1- The name strong_order […]
[…]
(1.4) — Otherwise, strong_ordering(
E <=> Fcompare_three_way()(E, F)) if it is a well-formed expression.[…]
-2- The name weak_order […]
[…]
(2.4) — Otherwise, weak_ordering(
E <=> Fcompare_three_way()(E, F)) if it is a well-formed expression.[…]
-3- The name partial_order […]
[…]
(3.3) — Otherwise, partial_ordering(
E <=> Fcompare_three_way()(E, F)) if it is a well-formed expression.[…]