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

Header: <optional>

Performs comparison operations on optional objects.

# Declarations

Compare two optional objects
template< class T, class U >
constexpr bool operator==( const optional<T>& lhs, const optional<U>& rhs );

(since C++17)

template< class T, class U >
constexpr bool operator!=( const optional<T>& lhs, const optional<U>& rhs );

(since C++17)

template< class T, class U >
constexpr bool operator<( const optional<T>& lhs, const optional<U>& rhs );

(since C++17)

template< class T, class U >
constexpr bool operator<=( const optional<T>& lhs, const optional<U>& rhs );

(since C++17)

template< class T, class U >
constexpr bool operator>( const optional<T>& lhs, const optional<U>& rhs );

(since C++17)

template< class T, class U >
constexpr bool operator>=( const optional<T>& lhs, const optional<U>& rhs );

(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 );

(since C++20)

Compare an optional object with a nullopt
template< class T >
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;

(since C++17)

template< class T >
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;

(since C++17) (until C++20)

template< class T >
constexpr std::strong_ordering
operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept;

(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 );

(since C++17)

template< class U, class T >
constexpr bool operator==( const U& value, const optional<T>& opt );

(since C++17)

template< class T, class U >
constexpr bool operator!=( const optional<T>& opt, const U& value );

(since C++17)

template< class U, class T >
constexpr bool operator!=( const U& value, const optional<T>& opt );

(since C++17)

template< class T, class U >
constexpr bool operator<( const optional<T>& opt, const U& value );

(since C++17)

template< class U, class T >
constexpr bool operator<( const U& value, const optional<T>& opt );

(since C++17)

template< class T, class U >
constexpr bool operator<=( const optional<T>& opt, const U& value );

(since C++17)

template< class U, class T >
constexpr bool operator<=( const U& value, const optional<T>& opt );

(since C++17)

template< class T, class U >
constexpr bool operator>( const optional<T>& opt, const U& value );

(since C++17)

template< class U, class T >
constexpr bool operator>( const U& value, const optional<T>& opt );

(since C++17)

template< class T, class U >
constexpr bool operator>=( const optional<T>& opt, const U& value );

(since C++17)

template< class U, class T >
constexpr bool operator>=( const U& value, const optional<T>& opt );

(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 );

(since C++20)

# Parameters

# Notes

Feature-test macro Value Std Feature __cpp_lib_constrained_equality 202403L (C++26) constrained comparison operators for std::optional

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 2945C++17order of template parameters inconsistent for compare-with-T casesmade consistent