std::experimental::optional::operator< and LessThanComparable requirementSection: 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: 2025-03-13
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: