This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.

### 3465. `compare_partial_order_fallback` requires `F < E`

Section: 17.12.6 [cmp.alg] Status: WP Submitter: Stephan T. Lavavej Opened: 2020-07-18 Last modified: 2020-11-09

Priority: 0

View all other issues in [cmp.alg].

View all issues with WP status.

Discussion:

`compare_partial_order_fallback` uses three expressions, but requires only two. The decayed types of `E` and `F` are required to be identical, but variations in constness might make a difference.

[2020-07-26; Reflector prioritization]

Set priority to 0 and status to Tentatively Ready after seven votes in favour during reflector discussions.

[2020-11-09 Approved In November virtual meeting. Status changed: Tentatively Ready → WP.]

Proposed resolution:

This wording is relative to N4861.

1. Modify 17.12.6 [cmp.alg] as indicated:

   > -6- The name `compare_partial_order_fallback` denotes a customization point object (16.3.3.3.6 [customization.point.object]). Given subexpressions `E` and `F`, the expression `compare_partial_order_fallback(E, F)` is expression-equivalent ( [defns.expression-equivalent]) to:

   > 1. (6.1) — If the decayed types of `E` and `F` differ, `compare_partial_order_fallback(E, F)` is ill-formed.

   > 2. (6.2) — Otherwise, `partial_order(E, F)` if it is a well-formed expression.

   > 3. (6.3) — Otherwise, if the expressions `E == F`, and `E < F`, and `F < E` are all both well-formed and convertible to `bool`,

   >    >     E == F ? partial_ordering::equivalent :
   >    >     E < F  ? partial_ordering::less :
   >    >     F < E  ? partial_ordering::greater :
   >    >              partial_ordering::unordered

   >    except that `E` and `F` are evaluated only once.

   > 4. (6.4) — Otherwise, `compare_partial_order_fallback(E, F)` is ill-formed.