template <class T, class U> constexpr bool operator==(const optional<T>& x, const optional<U>& y);
Requires: Выражение *x == *y должно быть правильно сформированным, а его результат должен быть преобразован в bool. [ Note: T не должно быть EqualityComparable. ] — end note
Returns: Если bool(x) != bool(y), false; в противном случае bool(x) == false, если true,; иначе *x == *y.
Remarks: Специализации этого шаблона функции, для которого *x == *y является выражением константы ядра, должны быть функциями constexpr.
template <class T, class U> constexpr bool operator!=(const optional<T>& x, const optional<U>& y);
Requires: Выражение *x != *y должно быть правильно сформированным, а его результат должен быть преобразован в bool.
Returns: Если bool(x) != bool(y), true; в противном случае, если bool(x) == false, false; иначе *x != *y.
Remarks: Специализации этого шаблона функции, для которого *x != *y является выражением константы ядра, должны быть функциями constexpr.
template <class T, class U> constexpr bool operator<(const optional<T>& x, const optional<U>& y);
Requires: *x < *y должен быть правильно сформирован, и его результат должен быть преобразован в bool.
Remarks: Специализации этого шаблона функции, для которого *x < *y является выражением константы ядра, должны быть функциями constexpr.
template <class T, class U> constexpr bool operator>(const optional<T>& x, const optional<U>& y);
Requires: Выражение *x > *y должно быть правильно сформированным, а его результат должен быть преобразован в bool.
Remarks: Специализации этого шаблона функции, для которого *x > *y является выражением константы ядра, должны быть функциями constexpr.
template <class T, class U> constexpr bool operator<=(const optional<T>& x, const optional<U>& y);
Requires: Выражение *x <= *y должно быть правильно сформированным, а его результат должен быть преобразован в bool.
Remarks: Специализации этого шаблона функции, для которого *x <= *y является выражением константы ядра, должны быть функциями constexpr.
template <class T, class U> constexpr bool operator>=(const optional<T>& x, const optional<U>& y);
Requires: Выражение *x >= *y должно быть правильно сформированным, а его результат должен быть преобразован в bool.