23 General utilities library [utilities]

23.6 Optional objects [optional]

23.6.6 Relational operators [optional.relops]

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.

Returns: Если !y, false; в противном случае, если !x, 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: Если !x, false; в противном случае, если !y, 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: Если !x, true; в противном случае, если !y, 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.

Returns: Если !y, true; в противном случае, если !x, false; иначе *x >= *y.

Remarks: Специализации этого шаблона функции, для которого *x >= *y является выражением константы ядра, должны быть функциями constexpr.