operator==, !=, <, <=, >, >=, <=> (std::optional)
|
Defined in header
<optional>
|
||
|
Compare two
optional
objects
|
||
|
template
<
class
T,
class
U
>
constexpr bool operator == ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(1) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator ! = ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(2) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator < ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(3) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator <= ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(4) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator > ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(5) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator >= ( const optional < T > & lhs, const optional < U > & rhs ) ; |
(6) | (since C++17) |
|
template
<
class
T,
std::
three_way_comparable_with
<
T
>
U
>
constexpr
std::
compare_three_way_result_t
<
T, U
>
|
(7) | (since C++20) |
|
Compare an
optional
object with a
nullopt
|
||
|
template
<
class
T
>
constexpr bool operator == ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(8) | (since C++17) |
|
template
<
class
T
>
constexpr bool operator == ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(9) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator ! = ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(10) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator ! = ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(11) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator < ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(12) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator < ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(13) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator <= ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(14) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator <= ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(15) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator > ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(16) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator > ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(17) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator >= ( const optional < T > & opt, std:: nullopt_t ) noexcept ; |
(18) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr bool operator >= ( std:: nullopt_t , const optional < T > & opt ) noexcept ; |
(19) |
(since C++17)
(until C++20) |
|
template
<
class
T
>
constexpr
std::
strong_ordering
|
(20) | (since C++20) |
|
Compare an
optional
object with a value
|
||
|
template
<
class
T,
class
U
>
constexpr bool operator == ( const optional < T > & opt, const U & value ) ; |
(21) | (since C++17) |
|
template
<
class
U,
class
T
>
constexpr bool operator == ( const U & value, const optional < T > & opt ) ; |
(22) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator ! = ( const optional < T > & opt, const U & value ) ; |
(23) | (since C++17) |
|
template
<
class
U,
class
T
>
constexpr bool operator ! = ( const U & value, const optional < T > & opt ) ; |
(24) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator < ( const optional < T > & opt, const U & value ) ; |
(25) | (since C++17) |
|
template
<
class
U,
class
T
>
constexpr bool operator < ( const U & value, const optional < T > & opt ) ; |
(26) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator <= ( const optional < T > & opt, const U & value ) ; |
(27) | (since C++17) |
|
template
<
class
U,
class
T
>
constexpr bool operator <= ( const U & value, const optional < T > & opt ) ; |
(28) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator > ( const optional < T > & opt, const U & value ) ; |
(29) | (since C++17) |
|
template
<
class
U,
class
T
>
constexpr bool operator > ( const U & value, const optional < T > & opt ) ; |
(30) | (since C++17) |
|
template
<
class
T,
class
U
>
constexpr bool operator >= ( const optional < T > & opt, const U & value ) ; |
(31) | (since C++17) |
|
template
<
class
U,
class
T
>
constexpr bool operator >= ( const U & value, const optional < T > & opt ) ; |
(32) | (since C++17) |
|
template
<
class
T,
std::
three_way_comparable_with
<
T
>
U
>
constexpr
std::
compare_three_way_result_t
<
T, U
>
|
(33) | (since C++20) |
Performs comparison operations on
optional
objects.
optional
objects,
lhs
and
rhs
. The contained values are compared (using the corresponding operator of
T
) only if both
lhs
and
rhs
contain values. Otherwise,
- lhs is considered equal to rhs if, and only if, both lhs and rhs do not contain a value.
- lhs is considered less than rhs if, and only if, rhs contains a value and lhs does not.
|
If the corresponding expression * lhs @ * rhs is ill-formed or its result is not convertible to bool , the program is ill-formed. |
(until C++26) |
|
This overload participates in overload resolution only if the corresponding expression * lhs @ * rhs is well-formed and its result is convertible to bool . |
(since C++26) |
nullopt
. Equivalent to
(1-6)
when comparing to an
optional
that does not contain a value.
|
The
|
(since C++20) |
T
) only if
opt
contains a value. Otherwise,
opt
is considered
less than
value
.
|
If the corresponding expression * opt @ value or value @ * opt (depending on the positions of the operands) is ill-formed or its result is not convertible to bool , the program is ill-formed. |
(until C++26) |
|
This overload participates in overload resolution only if all following conditions are satisfied:
|
(since C++26) |
Contents |
Parameters
| lhs, rhs, opt | - |
an
optional
object to compare
|
| value | - | value to compare to the contained value |
Return value
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
Exceptions
Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_constrained_equality
|
202403L
|
(C++26) | constrained comparison operators for std::optional |
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2945 | C++17 | order of template parameters inconsistent for compare-with-T cases | made consistent |