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 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> |
(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.
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 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
Otherwise, if bool(lhs) == false (and so bool(rhs) == false as well), returns true.
Otherwise, if bool(lhs) == false (and so bool(rhs) == false as well), returns false.
Otherwise, if bool(lhs) == false, returns true.
Otherwise, if bool(rhs) == false, returns false.
Otherwise, if bool(rhs) == false, returns true.
Otherwise, if bool(lhs) == false, returns false.
Otherwise, returns bool(lhs) <=> bool(rhs).
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 |