3324. Special-case std::strong/weak/partial_order for pointers

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.

  1. Change 17.11.6 [cmp.alg] as indicated:

    -1- The name strong_order […]

    1. […]

    2. (1.4) — Otherwise, strong_ordering(E <=> Fcompare_three_way()(E, F)) if it is a well-formed expression.

    3. […]

    -2- The name weak_order […]

    1. […]

    2. (2.4) — Otherwise, weak_ordering(E <=> Fcompare_three_way()(E, F)) if it is a well-formed expression.

    3. […]

    -3- The name partial_order […]

    1. […]

    2. (3.3) — Otherwise, partial_ordering(E <=> Fcompare_three_way()(E, F)) if it is a well-formed expression.

    3. […]