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> operator<=>( const optional<T>& lhs, const optional<U>& rhs ); |
(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 operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept; |
(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 T, class U > constexpr bool operator==( const T& value, const optional<U>& 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 T, class U > constexpr bool operator!=( const T& value, const optional<U>& 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 T, class U > constexpr bool operator<( const T& value, const optional<U>& 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 T, class U > constexpr bool operator<=( const T& value, const optional<U>& 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 T, class U > constexpr bool operator>( const T& value, const optional<U>& 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 T, class U > constexpr bool operator>=( const T& value, const optional<U>& opt ); |
(32) | (since C++17) |
template< class T, std::three_way_comparable_with<T> U > constexpr std::compare_three_way_result_t<T, U> operator<=>( const optional<T>& opt, const U& value ); |
(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 torhs
if, and only if, bothlhs
andrhs
do not contain a value. -
lhs
is considered less thanrhs
if, and only if,rhs
contains a value andlhs
does not.
opt
with a
nullopt
. Equivalent to
(1-6) when comparing to an
optional
that does not contain a value.
The |
(since C++20) |
opt
with a
value
. The values are compared (using the corresponding operator of
T
) only if
opt
contains a value. Otherwise,
opt
is considered
less than
value
. If the corresponding two-way comparison expression between
*opt
and
value
is not well-formed, or if its result is not convertible to
bool
, the program is ill-formed.
Parameters
lhs, rhs, opt | - | an optional object to compare |
value | - | value to compare to the contained value |
Return value
bool(lhs) != bool(rhs)
, returns
false
Otherwise, if bool(lhs) == false
(and so bool(rhs) == false
as well), returns true
Otherwise, returns *lhs == *rhs
.
bool(lhs) != bool(rhs)
, returns
true
Otherwise, if bool(lhs) == false
(and so bool(rhs) == false
as well), returns false
Otherwise, returns *lhs != *rhs
.
bool(rhs) == false
returns
false
Otherwise, if bool(lhs) == false
, returns true
Otherwise returns *lhs < *rhs
.
bool(lhs) == false
returns
true
Otherwise, if bool(rhs) == false
, returns false
Otherwise returns *lhs <= *rhs
.
bool(lhs) == false
returns
false
Otherwise, if bool(rhs) == false
, returns true
Otherwise returns *lhs > *rhs
.
bool(rhs) == false
returns
true
Otherwise, if bool(lhs) == false
, returns false
Otherwise returns *lhs >= *rhs
.
bool(lhs) && bool(rhs)
is
true
returns
*x <=> *y
Otherwise, returns
bool(lhs) <=> bool(rhs)
!opt
.
bool(opt)
.
false
.
bool(opt)
.
!opt
.
true
.
bool(opt)
.
false
.
true
.
!opt
.
bool(opt) <=> false
.
bool(opt) ? *opt == value : false
.
bool(opt) ? value == *opt : false
.
bool(opt) ? *opt != value : true
.
bool(opt) ? value != *opt : true
.
bool(opt) ? *opt < value : true
.
bool(opt) ? value < *opt : false
.
bool(opt) ? *opt <= value : true
.
bool(opt) ? value <= *opt : false
.
bool(opt) ? *opt > value : false
.
bool(opt) ? value > *opt : true
.
bool(opt) ? *opt >= value : false
.
bool(opt) ? value >= *opt : true
.
bool(opt) ? *opt <=> value : std::strong_ordering::less
.
Exceptions
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 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/optional/operator_cmp