Skip to content

Qualify all calls to std::get #5556

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions source/iterators.tex
Original file line number Diff line number Diff line change
@@ -4910,7 +4910,7 @@
\pnum
\effects
Initializes \tcode{v_} as if by
\tcode{v_\{in_place_index<$i$>, get<$i$>(x.v_)\}},
\tcode{v_\{in_place_index<$i$>, std::get<$i$>(x.v_)\}},
where $i$ is \tcode{x.v_.index()}.
\end{itemdescr}

@@ -4932,9 +4932,9 @@
Equivalent to:
\begin{itemize}
\item If \tcode{v_.index() == x.v_.index()}, then
\tcode{get<$i$>(v_) = get<$i$>(x.v_)}.
\tcode{std::get<$i$>(v_) = std::get<$i$>(x.v_)}.

\item Otherwise, \tcode{v_.emplace<$i$>(get<$i$>(x.v_))}.
\item Otherwise, \tcode{v_.emplace<$i$>(std::get<$i$>(x.v_))}.
\end{itemize}
where $i$ is \tcode{x.v_.index()}.

@@ -4959,7 +4959,7 @@

\pnum
\effects
Equivalent to: \tcode{return *get<I>(v_);}
Equivalent to: \tcode{return *std::get<I>(v_);}
\end{itemdescr}

\indexlibrarymember{operator->}{common_iterator}%
@@ -4987,19 +4987,19 @@
\begin{itemize}
\item
If \tcode{I} is a pointer type or if the expression
\tcode{get<I>(v_).operator->()} is
well-formed, equivalent to: \tcode{return get<I>(v_);}
\tcode{std::get<I>(v_).operator->()} is
well-formed, equivalent to: \tcode{return std::get<I>(v_);}

\item
Otherwise, if \tcode{iter_reference_t<I>} is a reference type, equivalent to:
\begin{codeblock}
auto&& tmp = *get<I>(v_);
auto&& tmp = *std::get<I>(v_);
return addressof(tmp);
\end{codeblock}

\item
Otherwise, equivalent to:
\tcode{return \exposid{proxy}(*get<I>(v_));} where
\tcode{return \exposid{proxy}(*std::get<I>(v_));} where
\exposid{proxy} is the exposition-only class:
\begin{codeblock}
class @\exposid{proxy}@ {
@@ -5029,7 +5029,7 @@

\pnum
\effects
Equivalent to \tcode{++get<I>(v_)}.
Equivalent to \tcode{++std::get<I>(v_)}.

\pnum
\returns
@@ -5064,7 +5064,7 @@
is \tcode{false},
equivalent to:
\begin{codeblock}
return get<I>(v_)++;
return std::get<I>(v_)++;
\end{codeblock}
Otherwise, equivalent to:
\begin{codeblock}
@@ -5105,7 +5105,7 @@
\pnum
\returns
\tcode{true} if \tcode{$i$ == $j$},
and otherwise \tcode{get<$i$>(x.v_) == get<$j$>(y.v_)},
and otherwise \tcode{std::get<$i$>(x.v_) == std::get<$j$>(y.v_)},
where $i$ is \tcode{x.v_.index()} and $j$ is \tcode{y.v_.index()}.
\end{itemdescr}

@@ -5126,7 +5126,7 @@
\pnum
\returns
\tcode{true} if $i$ and $j$ are each \tcode{1}, and otherwise
\tcode{get<$i$>(x.v_) == get<$j$>(y.v_)}, where
\tcode{std::get<$i$>(x.v_) == std::get<$j$>(y.v_)}, where
$i$ is \tcode{x.v_.index()} and $j$ is \tcode{y.v_.index()}.
\end{itemdescr}

@@ -5147,7 +5147,7 @@
\pnum
\returns
\tcode{0} if $i$ and $j$ are each \tcode{1}, and otherwise
\tcode{get<$i$>(x.v_) - get<$j$>(y.v_)}, where
\tcode{std::get<$i$>(x.v_) - std::get<$j$>(y.v_)}, where
$i$ is \tcode{x.v_.index()} and $j$ is \tcode{y.v_.index()}.
\end{itemdescr}

@@ -5167,7 +5167,7 @@

\pnum
\effects
Equivalent to: \tcode{return ranges::iter_move(get<I>(i.v_));}
Equivalent to: \tcode{return ranges::iter_move(std::get<I>(i.v_));}
\end{itemdescr}

\indexlibrarymember{iter_swap}{common_iterator}%
@@ -5185,7 +5185,7 @@

\pnum
\effects
Equivalent to \tcode{ranges::iter_swap(get<I>(x.v_), get<I2>(y.v_))}.
Equivalent to \tcode{ranges::iter_swap(std::get<I>(x.v_), std::get<I2>(y.v_))}.
\end{itemdescr}

\rSec2[default.sentinel]{Default sentinel}
4 changes: 2 additions & 2 deletions source/memory.tex
Original file line number Diff line number Diff line change
@@ -1054,8 +1054,8 @@
Equivalent to:
\begin{codeblock}
return uses_allocator_construction_args<T>(alloc, piecewise_construct,
forward_as_tuple(get<0>(std::move(pr))),
forward_as_tuple(get<1>(std::move(pr))));
forward_as_tuple(std::get<0>(std::move(pr))),
forward_as_tuple(std::get<1>(std::move(pr))));
\end{codeblock}
\end{itemdescr}

2 changes: 1 addition & 1 deletion source/threads.tex
Original file line number Diff line number Diff line change
@@ -6970,7 +6970,7 @@
\pnum
\effects
For all \tcode{i} in \range{0}{sizeof...(MutexTypes)},
\tcode{get<i>(pm).unlock()}.
\tcode{std::get<i>(pm).unlock()}.
\end{itemdescr}

\rSec3[thread.lock.unique]{Class template \tcode{unique_lock}}
124 changes: 64 additions & 60 deletions source/utilities.tex
Original file line number Diff line number Diff line change
@@ -834,29 +834,29 @@
\constraints
\begin{itemize}
\item
\tcode{is_constructible_v<T1, decltype(get<0>(\exposid{FWD}(p)))>}
\tcode{is_constructible_v<T1, decltype(std::get<0>(\exposid{FWD}(p)))>}
is \tcode{true} and
\item
\tcode{is_constructible_v<T2, decltype(get<1>(\exposid{FWD}(p)))>}
\tcode{is_constructible_v<T2, decltype(std::get<1>(\exposid{FWD}(p)))>}
is \tcode{true}.
\end{itemize}

\pnum
\effects
Initializes \tcode{first} with \tcode{get<0>(\exposid{FWD}(p))} and
\tcode{second} with \tcode{get<1>(\exposid{FWD}(p))}.
Initializes \tcode{first} with \tcode{std::get<0>(\exposid{FWD}(p))} and
\tcode{second} with \tcode{std::get<1>(\exposid{FWD}(p))}.

\pnum
\remarks
The expression inside \keyword{explicit} is equivalent to:
\begin{codeblock}
!is_convertible_v<decltype(get<0>(@\exposid{FWD}@(p))), T1> ||
!is_convertible_v<decltype(get<1>(@\exposid{FWD}@(p))), T2>
!is_convertible_v<decltype(std::get<0>(@\exposid{FWD}@(p))), T1> ||
!is_convertible_v<decltype(std::get<1>(@\exposid{FWD}@(p))), T2>
\end{codeblock}
The constructor is defined as deleted if
\begin{codeblock}
reference_constructs_from_temporary_v<first_type, decltype(get<0>(@\exposid{FWD}@(p)))> ||
reference_constructs_from_temporary_v<second_type, decltype(get<1>(@\exposid{FWD}@(p)))>
reference_constructs_from_temporary_v<first_type, decltype(std::get<0>(@\exposid{FWD}@(p)))> ||
reference_constructs_from_temporary_v<second_type, decltype(std::get<1>(@\exposid{FWD}@(p)))>
\end{codeblock}
is \tcode{true}.
\end{itemdescr}
@@ -1723,7 +1723,7 @@
\pnum
\effects
For all $i$, initializes the $i^\text{th}$ element of \tcode{*this} with
\tcode{std::forward<$\tcode{T}_i$>(get<$i$>(u))}.
\tcode{std::forward<$\tcode{T}_i$>(std::get<$i$>(u))}.
\end{itemdescr}

\indexlibraryctor{tuple}%
@@ -1745,7 +1745,7 @@
\item
\tcode{sizeof...(Types)} equals \tcode{sizeof...(UTypes)}, and
\item
\tcode{(is_constructible_v<Types, decltype(get<I>(\exposid{FWD}(u)))> \&\& ...)}
\tcode{(is_constructible_v<Types, decltype(std::get<I>(\exposid{FWD}(u)))> \&\& ...)}
is \tcode{true}, and
\item
either \tcode{sizeof...(Types)} is not 1, or
@@ -1759,17 +1759,17 @@
\pnum
\effects
For all $i$, initializes the $i^\textrm{th}$ element of \tcode{*this}
with \tcode{get<$i$>(\exposid{FWD}(u))}.
with \tcode{std::get<$i$>(\exposid{FWD}(u))}.

\pnum
\remarks
The expression inside \keyword{explicit} is equivalent to:
\begin{codeblock}
!(is_convertible_v<decltype(get<I>(@\exposid{FWD}@(u))), Types> && ...)
!(is_convertible_v<decltype(std::get<I>(@\exposid{FWD}@(u))), Types> && ...)
\end{codeblock}
The constructor is defined as deleted if
\begin{codeblock}
(reference_constructs_from_temporary_v<Types, decltype(get<I>(@\exposid{FWD}@(u)))> || ...)
(reference_constructs_from_temporary_v<Types, decltype(std::get<I>(@\exposid{FWD}@(u)))> || ...)
\end{codeblock}
is \tcode{true}.
\end{itemdescr}
@@ -1792,27 +1792,27 @@
\item
\tcode{sizeof...(Types)} is 2,
\item
\tcode{is_constructible_v<$\tcode{T}_0$, decltype(get<0>(\exposid{FWD}(u)))>} is \tcode{true}, and
\tcode{is_constructible_v<$\tcode{T}_0$, decltype(std::get<0>(\exposid{FWD}(u)))>} is \tcode{true}, and
\item
\tcode{is_constructible_v<$\tcode{T}_1$, decltype(get<1>(\exposid{FWD}(u)))>} is \tcode{true}.
\tcode{is_constructible_v<$\tcode{T}_1$, decltype(std::get<1>(\exposid{FWD}(u)))>} is \tcode{true}.
\end{itemize}

\pnum
\effects
Initializes the first element with \tcode{get<0>(\exposid{FWD}(u))} and
the second element with \tcode{get<1>(\exposid{FWD}(\brk{}u))}.
Initializes the first element with \tcode{std::get<0>(\exposid{FWD}(u))}\\
and the second element with \tcode{std::get<1>(\exposid{FWD}(\brk{}u))}.

\pnum
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!is_convertible_v<decltype(get<0>(@\exposid{FWD}@(u))), @$\tcode{T}_0$@> ||
!is_convertible_v<decltype(get<1>(@\exposid{FWD}@(u))), @$\tcode{T}_1$@>
!is_convertible_v<decltype(std::get<0>(@\exposid{FWD}@(u))), @$\tcode{T}_0$@> ||
!is_convertible_v<decltype(std::get<1>(@\exposid{FWD}@(u))), @$\tcode{T}_1$@>
\end{codeblock}
The constructor is defined as deleted if
\begin{codeblock}
reference_constructs_from_temporary_v<@$\tcode{T}_0$@, decltype(get<0>(@\exposid{FWD}@(u)))> ||
reference_constructs_from_temporary_v<@$\tcode{T}_1$@, decltype(get<1>(@\exposid{FWD}@(u)))>
reference_constructs_from_temporary_v<@$\tcode{T}_0$@, decltype(std::get<0>(@\exposid{FWD}@(u)))> ||
reference_constructs_from_temporary_v<@$\tcode{T}_1$@, decltype(std::get<1>(@\exposid{FWD}@(u)))>
\end{codeblock}
is \tcode{true}.
\end{itemdescr}
@@ -1932,8 +1932,8 @@

\pnum
\effects
For all $i$, assigns \tcode{std::forward<$\tcode{T}_i$>(get<$i$>(u))} to
\tcode{get<$i$>(*this)}.
For all $i$, assigns \tcode{std::forward<$\tcode{T}_i$>(std::get<$i$>(u))} to
\tcode{std::get<$i$>(*this)}.

\pnum
\returns
@@ -1963,7 +1963,7 @@
\pnum
\effects
For all $i$,
assigns \tcode{std::forward<T$_i$>(get<$i$>(u))} to \tcode{get<$i$>(*this)}.
assigns \tcode{std::forward<T$_i$>(std::get<$i$>(u))} to \tcode{std::get<$i$>(*this)}.

\pnum
\returns
@@ -2032,8 +2032,8 @@

\pnum
\effects
For all $i$, assigns \tcode{std::forward<$\tcode{U}_i$>(get<$i$>(u))} to
\tcode{get<$i$>(*this)}.
For all $i$, assigns \tcode{std::forward<$\tcode{U}_i$>(std::get<$i$>(u))} to
\tcode{std::get<$i$>(*this)}.

\pnum
\returns
@@ -2058,7 +2058,7 @@
\pnum
\effects
For all $i$,
assigns \tcode{std::forward<U$_i$>(get<$i$>(u))} to \tcode{get<$i$>(*this)}.
assigns \tcode{std::forward<U$_i$>(std::get<$i$>(u))} to \tcode{std::get<$i$>(*this)}.

\pnum
\returns
@@ -2358,7 +2358,8 @@
template<class F, class Tuple, size_t... I>
constexpr decltype(auto) @\placeholdernc{apply-impl}@(F&& f, Tuple&& t, index_sequence<I...>) {
// \expos
return @\placeholdernc{INVOKE}@(std::forward<F>(f), get<I>(std::forward<Tuple>(t))...); // see \ref{func.require}
return @\placeholdernc{INVOKE}@(std::forward<F>(f), std::get<I>(std::forward<Tuple>(t))...);
// see \ref{func.require}
}
}
\end{codeblock}
@@ -2380,7 +2381,7 @@
\mandates
If \tcode{tuple_size_v<remove_reference_t<Tuple>>} is 1,
then
\tcode{reference_constructs_from_temporary_v<T, decltype(get<0>(declval<Tuple>()))>}
\tcode{reference_constructs_from_temporary_v<T, decltype(std::get<0>(declval<Tuple>()))>}
is \tcode{false}.

\pnum
@@ -2389,9 +2390,9 @@
\begin{codeblock}
namespace std {
template<class T, class Tuple, size_t... I>
requires is_constructible_v<T, decltype(get<I>(declval<Tuple>()))...>
requires is_constructible_v<T, decltype(std::get<I>(declval<Tuple>()))...>
constexpr T @\placeholdernc{make-from-tuple-impl}@(Tuple&& t, index_sequence<I...>) { // \expos
return T(get<I>(std::forward<Tuple>(t))...);
return T(std::get<I>(std::forward<Tuple>(t))...);
}
}
\end{codeblock}
@@ -2584,9 +2585,9 @@
\begin{example}
\begin{codeblock}
const tuple<int, const int, double, double> t(1, 2, 3.4, 5.6);
const int& i1 = get<int>(t); // OK, \tcode{i1} has value \tcode{1}
const int& i2 = get<const int>(t); // OK, \tcode{i2} has value \tcode{2}
const double& d = get<double>(t); // error: type \tcode{double} is not unique within \tcode{t}
const int& i1 = std::get<int>(t); // OK, \tcode{i1} has value \tcode{1}
const int& i2 = std::get<const int>(t); // OK, \tcode{i2} has value \tcode{2}
const double& d = std::get<double>(t); // error: type \tcode{double} is not unique within \tcode{t}
\end{codeblock}
\end{example}
\end{itemdescr}
@@ -2613,14 +2614,14 @@
\mandates
For all \tcode{i},
where $0 \leq \tcode{i} < \tcode{sizeof...(TTypes)}$,
\tcode{get<i>(t) == get<i>(u)} is a valid expression
\tcode{std::get<i>(t) == std::get<i>(u)} is a valid expression
returning a type that is convertible to \tcode{bool}.
\tcode{sizeof...(TTypes)} equals
\tcode{sizeof...(UTypes)}.

\pnum
\returns
\tcode{true} if \tcode{get<i>(t) == get<i>(u)} for all
\tcode{true} if \tcode{std::get<i>(t) == std::get<i>(u)} for all
\tcode{i}, otherwise \tcode{false}.
For any two zero-length tuples \tcode{e} and \tcode{f}, \tcode{e == f} returns \tcode{true}.

@@ -2647,7 +2648,7 @@
\tcode{t <=> u} returns \tcode{strong_ordering::equal}.
Otherwise, equivalent to:
\begin{codeblock}
if (auto c = @\placeholder{synth-three-way}@(get<0>(t), get<0>(u)); c != 0) return c;
if (auto c = @\placeholder{synth-three-way}@(std::get<0>(t), std::get<0>(u)); c != 0) return c;
return @$\tcode{t}_\mathrm{tail}$@ <=> @$\tcode{u}_\mathrm{tail}$@;
\end{codeblock}
where $\tcode{r}_\mathrm{tail}$ for some tuple \tcode{r}
@@ -4696,7 +4697,7 @@
\effects
If \tcode{w} holds a value, initializes the \tcode{variant} to hold the same
alternative as \tcode{w} and direct-initializes the contained value
with \tcode{get<j>(w)}, where \tcode{j} is \tcode{w.index()}.
with \tcode{std::get<j>(w)}, where \tcode{j} is \tcode{w.index()}.
Otherwise, initializes the \tcode{variant} to not hold a value.

\pnum
@@ -4725,7 +4726,7 @@
\effects
If \tcode{w} holds a value, initializes the \tcode{variant} to hold the same
alternative as \tcode{w} and direct-initializes the contained value with
\tcode{get<j>(std::move(w))}, where \tcode{j} is \tcode{w.index()}.
\tcode{std::get<j>(std::move(w))}, where \tcode{j} is \tcode{w.index()}.
Otherwise, initializes the \tcode{variant} to not hold a value.

\pnum
@@ -4983,7 +4984,7 @@
Otherwise, if either \tcode{is_nothrow_copy_constructible_v<$\tcode{T}_j$>}
is \tcode{true} or
\tcode{is_nothrow_move_con\-structible_v<$\tcode{T}_j$>} is \tcode{false},
equivalent to \tcode{emplace<$j$>(get<$j$>(rhs))}.
equivalent to \tcode{emplace<$j$>(std::get<$j$>(rhs))}.
\item
Otherwise, equivalent to \tcode{operator=(variant(rhs))}.
\end{itemize}
@@ -5032,10 +5033,10 @@
Otherwise, if \tcode{*this} holds a value but \tcode{rhs} does not, destroys the value
contained in \tcode{*this} and sets \tcode{*this} to not hold a value.
\item
Otherwise, if \tcode{index() == $j$}, assigns \tcode{get<$j$>(std::move(rhs))} to
Otherwise, if \tcode{index() == $j$}, assigns \tcode{std::get<$j$>(std::move(rhs))} to
the value contained in \tcode{*this}.
\item
Otherwise, equivalent to \tcode{emplace<$j$>(get<$j$>(std::move(rhs)))}.
Otherwise, equivalent to \tcode{emplace<$j$>(std::get<$j$>(std::move(rhs)))}.
\end{itemize}

\pnum
@@ -5324,23 +5325,26 @@
\item
If \tcode{valueless_by_exception() \&\& rhs.valueless_by_exception()} no effect.
\item
Otherwise, if \tcode{index() == rhs.index()}, calls \tcode{swap(get<$i$>(*this), get<$i$>(rhs))} where $i$ is \tcode{index()}.
Otherwise, if \tcode{index() == rhs.index()},\\
calls \tcode{swap(std::get<$i$>(*this), std::get<$i$>(rhs))} where $i$ is \tcode{index()}.
\item
Otherwise, exchanges values of \tcode{rhs} and \tcode{*this}.
\end{itemize}

\pnum
\throws
If \tcode{index() == rhs.index()},
any exception thrown by \tcode{swap(get<$i$>(*this), get<$i$>(rhs))}
any exception thrown by\\
\tcode{swap(std::get<$i$>(*this), std::get<$i$>(rhs))}
with $i$ being \tcode{index()}.
Otherwise, any exception thrown by the move constructor
of $\tcode{T}_i$ or $\tcode{T}_j$
with $i$ being \tcode{index()} and $j$ being \tcode{rhs.index()}.

\pnum
\remarks
If an exception is thrown during the call to function \tcode{swap(get<$i$>(*this), get<$i$>(rhs))},
If an exception is thrown during the call to function\\
tcode{swap(std::get<$i$>(*this), std::get<$i$>(rhs))},
the states of the contained values of \tcode{*this} and of \tcode{rhs} are
determined by the exception safety guarantee of \tcode{swap} for lvalues of
$\tcode{T}_i$ with $i$ being \tcode{index()}.
@@ -5529,14 +5533,14 @@
\begin{itemdescr}
\pnum
\mandates
\tcode{get<$i$>(v) == get<$i$>(w)} is a valid expression that is
\tcode{std::get<$i$>(v) == std::get<$i$>(w)} is a valid expression that is
convertible to \tcode{bool}, for all $i$.

\pnum
\returns
If \tcode{v.index() != w.index()}, \tcode{false};
otherwise if \tcode{v.valueless_by_exception()}, \tcode{true};
otherwise \tcode{get<$i$>(v) == get<$i$>(w)} with $i$ being \tcode{v.index()}.
otherwise \tcode{std::get<$i$>(v) == std::get<$i$>(w)} with $i$ being \tcode{v.index()}.
\end{itemdescr}

\indexlibrarymember{operator"!=}{variant}%
@@ -5548,14 +5552,14 @@
\begin{itemdescr}
\pnum
\mandates
\tcode{get<$i$>(v) != get<$i$>(w)} is a valid expression that is
\tcode{std::get<$i$>(v) != std::get<$i$>(w)} is a valid expression that is
convertible to \tcode{bool}, for all $i$.

\pnum
\returns
If \tcode{v.index() != w.index()}, \tcode{true};
otherwise if \tcode{v.valueless_by_exception()}, \tcode{false};
otherwise \tcode{get<$i$>(v) != get<$i$>(w)} with $i$ being \tcode{v.index()}.
otherwise \tcode{std::get<$i$>(v) != std::get<$i$>(w)} with $i$ being \tcode{v.index()}.
\end{itemdescr}

\indexlibrarymember{operator<}{variant}%
@@ -5567,7 +5571,7 @@
\begin{itemdescr}
\pnum
\mandates
\tcode{get<$i$>(v) < get<$i$>(w)} is a valid expression that is
\tcode{std::get<$i$>(v) < std::get<$i$>(w)} is a valid expression that is
convertible to \tcode{bool}, for all $i$.

\pnum
@@ -5576,7 +5580,7 @@
otherwise if \tcode{v.valueless_by_exception()}, \tcode{true};
otherwise, if \tcode{v.index() < w.index()}, \tcode{true};
otherwise if \tcode{v.index() > w.index()}, \tcode{false};
otherwise \tcode{get<$i$>(v) < get<$i$>(w)} with $i$ being \tcode{v.index()}.
otherwise \tcode{std::get<$i$>(v) < std::get<$i$>(w)} with $i$ being \tcode{v.index()}.
\end{itemdescr}

\indexlibrarymember{operator>}{variant}%
@@ -5588,7 +5592,7 @@
\begin{itemdescr}
\pnum
\mandates
\tcode{get<$i$>(v) > get<$i$>(w)} is a valid expression that is
\tcode{std::get<$i$>(v) > std::get<$i$>(w)} is a valid expression that is
convertible to \tcode{bool}, for all $i$.

\pnum
@@ -5597,7 +5601,7 @@
otherwise if \tcode{w.valueless_by_exception()}, \tcode{true};
otherwise, if \tcode{v.index() > w.index()}, \tcode{true};
otherwise if \tcode{v.index() < w.index()}, \tcode{false};
otherwise \tcode{get<$i$>(v) > get<$i$>(w)} with $i$ being \tcode{v.index()}.
otherwise \tcode{std::get<$i$>(v) > std::get<$i$>(w)} with $i$ being \tcode{v.index()}.
\end{itemdescr}

\indexlibrarymember{operator<=}{variant}%
@@ -5609,7 +5613,7 @@
\begin{itemdescr}
\pnum
\mandates
\tcode{get<$i$>(v) <= get<$i$>(w)} is a valid expression that is
\tcode{std::get<$i$>(v) <= std::get<$i$>(w)} is a valid expression that is
convertible to \tcode{bool}, for all $i$.

\pnum
@@ -5618,7 +5622,7 @@
otherwise if \tcode{w.valueless_by_exception()}, \tcode{false};
otherwise, if \tcode{v.index() < w.index()}, \tcode{true};
otherwise if \tcode{v.index() > w.index()}, \tcode{false};
otherwise \tcode{get<$i$>(v) <= get<$i$>(w)} with $i$ being \tcode{v.index()}.
otherwise \tcode{std::get<$i$>(v) <= std::get<$i$>(w)} with $i$ being \tcode{v.index()}.
\end{itemdescr}

\indexlibrarymember{operator>=}{variant}%
@@ -5630,7 +5634,7 @@
\begin{itemdescr}
\pnum
\mandates
\tcode{get<$i$>(v) >= get<$i$>(w)} is a valid expression that is
\tcode{std::get<$i$>(v) >= std::get<$i$>(w)} is a valid expression that is
convertible to \tcode{bool}, for all $i$.

\pnum
@@ -5639,7 +5643,7 @@
otherwise if \tcode{v.valueless_by_exception()}, \tcode{false};
otherwise, if \tcode{v.index() > w.index()}, \tcode{true};
otherwise if \tcode{v.index() < w.index()}, \tcode{false};
otherwise \tcode{get<$i$>(v) >= get<$i$>(w)} with $i$ being \tcode{v.index()}.
otherwise \tcode{std::get<$i$>(v) >= std::get<$i$>(w)} with $i$ being \tcode{v.index()}.
\end{itemdescr}

\indexlibrarymember{operator<=>}{variant}%
@@ -5659,7 +5663,7 @@
if (v.valueless_by_exception()) return strong_ordering::less;
if (w.valueless_by_exception()) return strong_ordering::greater;
if (auto c = v.index() <=> w.index(); c != 0) return c;
return get<@$i$@>(v) <=> get<@$i$@>(w);
return std::get<@$i$@>(v) <=> std::get<@$i$@>(w);
\end{codeblock}
with $i$ being \tcode{v.index()}.
\end{itemdescr}
@@ -5707,11 +5711,11 @@
for all $0 \leq i < n$.
For each valid pack $m$, let $e(m)$ denote the expression:
\begin{codeblock}
@\placeholder{INVOKE}@(std::forward<Visitor>(vis), get<@$m$@>(std::forward<V>(vars))...) // see \ref{func.require}
@\placeholder{INVOKE}@(std::forward<Visitor>(vis), std::get<@$m$@>(std::forward<V>(vars))...) // see \ref{func.require}
\end{codeblock}
for the first form and
\begin{codeblock}
@\placeholder{INVOKE}@<R>(std::forward<Visitor>(vis), get<@$m$@>(std::forward<V>(vars))...) // see \ref{func.require}
@\placeholder{INVOKE}@<R>(std::forward<Visitor>(vis), std::get<@$m$@>(std::forward<V>(vars))...) // see \ref{func.require}
\end{codeblock}
for the second form.