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

### 2417. [fund.ts.v2] `std::experimental::optional::operator<` and `LessThanComparable` requirement

Section: 5.7 [fund.ts.v2::optional.relops], 5.9 [fund.ts.v2::optional.comp_with_t] Status: NAD Submitter: Daniel Krügler Opened: 2014-06-20 Last modified: 2021-06-06

Priority: Not Prioritized

View all issues with NAD status.

Discussion:

Addresses: fund.ts.v2

Currently, `std::experimental::optional::operator==` imposes the `EqualityComparable` requirement which provides two guarantees: It ensures that `operator!=` can rely on the equivalence-relation property and more importantly, that the `BooleanTestable` requirements suggested by issue 2114 are automatically implied.

`std::experimental::optional::operator<` doesn't provide a `LessThanComparable` requirement, but there was quite an historic set of changes involved with that family of types: As of N3527 this operator was defined in terms of `operator<` of the contained type `T` and imposed the `LessThanComparable` requirement. In the final acceptance step of `optional` by the committee, the definition was expressed in terms of `std::less` and the `LessThanComparable` requirement had been removed.

The inconsistency between `operator==` and `operator<` should be removed. One possible course of action would be to add the `LessThanComparable` to `std::experimental::optional::operator<`. The `EqualityComparable` requirement of `operator==` could also be removed, but in that case both operators would at least need to require the `BooleanTestable` requirements (see 2114) for the result type of `T`'s `operator==` and `operator<`.

Arguably, corresponding operators for `pair` and `tuple` do not impose `LessThanComparable` (nor `EqualityComparable`), albeit the definition of the "derived" relation functions depend on properties ensured by `LessThanComparable`. According to the SGI definition, the intention was to imposed both `EqualityComparable` and `LessThanComparable`. If this is not intended, the standard should clarify this position.

[2015-02 Cologne]

VV, DK, JY discuss why and when `LessThanComparable` was removed. AM: Move to LEWG. Please tell LWG when you look at it.

[2016-11-08, Issaquah]

Not adopted during NB comment resolution

[LEWG Kona 2017]

Recommend NAD: We've done a lot of work getting the C++17 semantics we want in this area; we're not going to change them 3 days from DIS or change the TSv2 behavior to be different from '17.

Proposed resolution: