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: 2023-06-17
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: