# operator==, !=, <, <=, >, >=(std::experimental::optional)

From cppreference.com
< cpp‎ | experimental‎ | optional

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

Performs comparison operations on `optional` objects.

1-6) Compares two `optional` objects, `lhs` and `rhs`. The contained values are compared (using operator== for (1-2) and operator< for (3-6)) 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 operator== for (19-22) and operator< for (23-30)) only if `opt` contains a value. Otherwise, `opt` is considered less than `value`.

### Parameters

lhs, rhs, opt | - | an `optional` object to compare
value | - | value to compare to the contained value
Type requirements
- `T` must meet the requirements of `EqualityComparable` in order to use overloads (1-2).

### 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) Returns !(lhs == rhs)
3) If bool(rhs) == false returns false
Otherwise, if bool(lhs) == false, returns true
Otherwise returns *x < *y
4) Returns !(rhs < lhs)
5) Returns rhs < lhs
6) 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 !(opt > value).
26) Returns !(value > opt).
27) Returns bool(opt) ? value < *opt : false.
28) Returns bool(opt) ? *opt < value : true.
29) Returns !(opt < value).
30) Returns !(value < opt).

### Exceptions

1-6) (none)
7-18)
`noexcept` specification:
noexcept
19-30) (none)
Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/experimental/optional/operator_cmp&oldid=91561"
Category:

- unconditionally noexcept

Hidden categories:

- Pages with unreviewed unconditional noexcept template
- Pages with unreviewed noexcept template