NAME

operator==,!=,<,<=,>,>=(std::optional) - operator==,!=,<,<=,>,>=(std::optional)

Synopsis


Defined in header <optional>
Compare two optional objects
template< class T, class U > (1) (since C++17)
constexpr bool operator==( const optional<T>& lhs, const optional<U>& rhs );
template< class T, class U > (2) (since C++17)
constexpr bool operator!=( const optional<T>& lhs, const optional<U>& rhs );
template< class T, class U > (3) (since C++17)
constexpr bool operator<( const optional<T>& lhs, const optional<U>& rhs );
template< class T, class U > (4) (since C++17)
constexpr bool operator<=( const optional<T>& lhs, const optional<U>& rhs );
template< class T, class U > (5) (since C++17)
constexpr bool operator>( const optional<T>& lhs, const optional<U>& rhs );
template< class T, class U > (6) (since C++17)
constexpr bool operator>=( const optional<T>& lhs, const optional<U>& rhs );
Compare an optional object with a nullopt
template< class T > (7) (since C++17)
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;
template< class T > (8) (since C++17)
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;
template< class T > (9) (since C++17)
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;
template< class T > (10) (since C++17)
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;
template< class T > (11) (since C++17)
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;
template< class T > (12) (since C++17)
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;
template< class T > (13) (since C++17)
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;
template< class T > (14) (since C++17)
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt) noexcept;
template< class T > (15) (since C++17)
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;
template< class T > (16) (since C++17)
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;
template< class T > (17) (since C++17)
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;
template< class T > (18) (since C++17)
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;
Compare an optional object with a T
template< class T, class U > (19) (since C++17)
constexpr bool operator==( const optional<T>& opt, const U& value);
template< class T, class U > (20) (since C++17)
constexpr bool operator==( const T& value, const optional<U>& opt );
template< class T, class U > (21) (since C++17)
constexpr bool operator!=( const optional<T>& opt, const U& value );
template< class T, class U > (22) (since C++17)
constexpr bool operator!=( const T& value, const optional<U>& opt );
template< class T, class U > (23) (since C++17)
constexpr bool operator<( const optional<T>& opt, const U& value );
template< class T, class U > (24) (since C++17)
constexpr bool operator<( const T& value, const optional<U>& opt );
template< class T, class U > (25) (since C++17)
constexpr bool operator<=( const optional<T>& opt, const U& value );
template< class T, class U > (26) (since C++17)
constexpr bool operator<=( const T& value, const optional<U>& opt);
template< class T, class U > (27) (since C++17)
constexpr bool operator>( const optional<T>& opt, const U& value );
template< class T, class U > (28) (since C++17)
constexpr bool operator>( const T& value, const optional<U>& opt );
template< class T, class U > (29) (since C++17)
constexpr bool operator>=( const optional<T>& opt, const U& value );
template< class T, class U > (30) (since C++17)
constexpr bool operator>=( const T& value, const optional<U>& opt );


Performs comparison operations on optional objects.
1-6) Compares two 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.


7-18) Compares opt with a nullopt. Equivalent to (1-6) when comparing to an optional that does not contain a value.
19-30) Compares 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 comparison expression between *opt and value is not well-formed, or if its result is not convertible to bool, the behavior is undefined.

Parameters


lhs, rhs, opt - an optional object to compare
value - value to compare to the contained value

Return value


1) If bool(lhs) != bool(rhs), returns false
Otherwise, if bool(lhs) == false (and so bool(rhs) == false as well), returns true
Otherwise, returns *lhs == *rhs.
2) If bool(lhs) != bool(rhs), returns true
Otherwise, if bool(lhs) == false (and so bool(rhs) == false as well), returns false
Otherwise, returns *lhs != *rhs.
3) If bool(rhs) == false returns false
Otherwise, if bool(lhs) == false, returns true
Otherwise returns *lhs < *rhs
4) If bool(lhs) == false returns true
Otherwise, if bool(rhs) == false, returns false
Otherwise returns *lhs <= *rhs
5) If bool(lhs) == false returns false
Otherwise, if bool(rhs) == false, returns true
Otherwise returns *lhs > *rhs
6) If bool(rhs) == false returns true
Otherwise, if bool(lhs) == false, returns false
Otherwise returns *lhs >= *rhs
7-8) Returns !opt.
9-10) Returns bool(opt).
11) Returns false.
12) Returns bool(opt).
13) Returns !opt.
14) Returns true.
15) Returns bool(opt).
16) Returns false.
17) Returns true.
18) Returns !opt.
19) Returns bool(opt) ? *opt == value : false.
20) Returns bool(opt) ? value == *opt : false.
21) Returns bool(opt) ? *opt != value : true.
22) Returns bool(opt) ? value != *opt : true.
23) Returns bool(opt) ? *opt < value : true.
24) Returns bool(opt) ? value < *opt : false.
25) Returns bool(opt) ? *opt <= value : true.
26) Returns bool(opt) ? value <= *opt : false.
27) Returns bool(opt) ? *opt > value : false.
28) Returns bool(opt) ? value > *opt : true.
29) Returns bool(opt) ? *opt >= value : false.
30) Returns bool(opt) ? value >= *opt : true.

Exceptions


1-6, 19-30) (none)


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