This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

200
cppdraft/optional/relops.md Normal file
View File

@@ -0,0 +1,200 @@
[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.2Template 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.4Concept 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)