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