201 lines
6.2 KiB
Markdown
201 lines
6.2 KiB
Markdown
[optional.relops]
|
||
|
||
# 22 General utilities library [[utilities]](./#utilities)
|
||
|
||
## 22.5 Optional objects [[optional]](optional#relops)
|
||
|
||
### 22.5.7 Relational operators [optional.relops]
|
||
|
||
[ð](#lib:operator==,optional)
|
||
|
||
`template<class T, class U> constexpr bool operator==(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5042)
|
||
|
||
*Constraints*: The expression *x == *y is well-formed and
|
||
its result is convertible to bool[.](#1.sentence-1)
|
||
|
||
[*Note [1](#note-1)*:
|
||
|
||
T need not be [*Cpp17EqualityComparable*](utility.arg.requirements#:Cpp17EqualityComparable "16.4.4.2 Template argument requirements [utility.arg.requirements]")[.](#1.sentence-2)
|
||
|
||
â *end note*]
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5050)
|
||
|
||
*Returns*: If x.has_value() != y.has_value(), false; otherwise if x.has_value() == false, true; otherwise *x == *y[.](#2.sentence-1)
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5054)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x == *y is a core constant expression
|
||
are constexpr functions[.](#3.sentence-1)
|
||
|
||
[ð](#lib:operator!=,optional)
|
||
|
||
`template<class T, class U> constexpr bool operator!=(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5067)
|
||
|
||
*Constraints*: The expression *x != *y is well-formed and
|
||
its result is convertible to bool[.](#4.sentence-1)
|
||
|
||
[5](#5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5072)
|
||
|
||
*Returns*: If x.has_value() != y.has_value(), true;
|
||
otherwise, if x.has_value() == false, false;
|
||
otherwise *x != *y[.](#5.sentence-1)
|
||
|
||
[6](#6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5078)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x != *y is a core constant expression
|
||
are constexpr functions[.](#6.sentence-1)
|
||
|
||
[ð](#lib:operator%3c,optional)
|
||
|
||
`template<class T, class U> constexpr bool operator<(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[7](#7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5091)
|
||
|
||
*Constraints*: *x < *y is well-formed
|
||
and its result is convertible to bool[.](#7.sentence-1)
|
||
|
||
[8](#8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5096)
|
||
|
||
*Returns*: If !y, false;
|
||
otherwise, if !x, true;
|
||
otherwise *x < *y[.](#8.sentence-1)
|
||
|
||
[9](#9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5102)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x < *y is a core constant expression
|
||
are constexpr functions[.](#9.sentence-1)
|
||
|
||
[ð](#lib:operator%3e,optional)
|
||
|
||
`template<class T, class U> constexpr bool operator>(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[10](#10)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5115)
|
||
|
||
*Constraints*: The expression *x > *y is well-formed and
|
||
its result is convertible to bool[.](#10.sentence-1)
|
||
|
||
[11](#11)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5120)
|
||
|
||
*Returns*: If !x, false;
|
||
otherwise, if !y, true;
|
||
otherwise *x > *y[.](#11.sentence-1)
|
||
|
||
[12](#12)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5126)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x > *y is a core constant expression
|
||
are constexpr functions[.](#12.sentence-1)
|
||
|
||
[ð](#lib:operator%3c=,optional)
|
||
|
||
`template<class T, class U> constexpr bool operator<=(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[13](#13)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5139)
|
||
|
||
*Constraints*: The expression *x <= *y is well-formed and
|
||
its result is convertible to bool[.](#13.sentence-1)
|
||
|
||
[14](#14)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5144)
|
||
|
||
*Returns*: If !x, true;
|
||
otherwise, if !y, false;
|
||
otherwise *x <= *y[.](#14.sentence-1)
|
||
|
||
[15](#15)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5150)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x <= *y is a core constant expression
|
||
are constexpr functions[.](#15.sentence-1)
|
||
|
||
[ð](#lib:operator%3e=,optional)
|
||
|
||
`template<class T, class U> constexpr bool operator>=(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[16](#16)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5163)
|
||
|
||
*Constraints*: The expression *x >= *y is well-formed and
|
||
its result is convertible to bool[.](#16.sentence-1)
|
||
|
||
[17](#17)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5168)
|
||
|
||
*Returns*: If !y, true;
|
||
otherwise, if !x, false;
|
||
otherwise *x >= *y[.](#17.sentence-1)
|
||
|
||
[18](#18)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5174)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x >= *y is a core constant expression
|
||
are constexpr functions[.](#18.sentence-1)
|
||
|
||
[ð](#lib:operator%3c=%3e,optional)
|
||
|
||
`template<class T, [three_way_comparable_with](cmp.concept#concept:three_way_comparable_with "17.12.4 Concept three_way_comparable [cmp.concept]")<T> U>
|
||
constexpr compare_three_way_result_t<T, U>
|
||
operator<=>(const optional<T>& x, const optional<U>& y);
|
||
`
|
||
|
||
[19](#19)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5189)
|
||
|
||
*Returns*: If x && y, *x <=> *y; otherwise x.has_value() <=> y.has_value()[.](#19.sentence-1)
|
||
|
||
[20](#20)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L5193)
|
||
|
||
*Remarks*: Specializations of this function template
|
||
for which *x <=> *y is a core constant expression
|
||
are constexpr functions[.](#20.sentence-1)
|