|
1729 | 1729 | Equivalent to:
|
1730 | 1730 | \begin{codeblock}
|
1731 | 1731 | return apply_impl(std::forward<F>(f), std::forward<Tuple>(t),
|
1732 |
| - make_index_sequence<tuple_size_v<decay_t<Tuple>>>{}); |
| 1732 | + make_index_sequence<tuple_size_v<remove_reference_t<Tuple>>>{}); |
1733 | 1733 | \end{codeblock}
|
1734 | 1734 | \end{itemdescr}
|
1735 | 1735 |
|
|
1751 | 1751 | \end{codeblock}
|
1752 | 1752 | Equivalent to:
|
1753 | 1753 | \begin{codeblock}
|
1754 |
| -return make_from_tuple_impl<T>(forward<Tuple>(t), |
1755 |
| - make_index_sequence<tuple_size_v<decay_t<Tuple>>>{}); |
| 1754 | +return make_from_tuple_impl<T>( |
| 1755 | + forward<Tuple>(t), |
| 1756 | + make_index_sequence<tuple_size_v<remove_reference_t<Tuple>>>{}); |
1756 | 1757 | \end{codeblock}
|
1757 | 1758 | \begin{note} The type of \tcode{T} must be supplied
|
1758 | 1759 | as an explicit template parameter,
|
|
2430 | 2431 | this constructor shall be a constexpr constructor.
|
2431 | 2432 | This constructor shall not participate in overload resolution unless
|
2432 | 2433 | \tcode{is_constructible_v<T, U\&\&>} is \tcode{true},
|
2433 |
| -\tcode{is_same_v<decay_t<U>, in_place_t>} is \tcode{false}, and |
2434 |
| -\tcode{is_same_v<optional<T>, decay_t<U>>} is \tcode{false}. |
| 2434 | +\tcode{is_same_v<remove_cvref_t<U>, in_place_t>} is \tcode{false}, and |
| 2435 | +\tcode{is_same_v<remove_cvref_t<U>, optional>} is \tcode{false}. |
2435 | 2436 | The constructor is explicit if and only if
|
2436 | 2437 | \tcode{is_convertible_v<U\&\&, T>} is \tcode{false}.
|
2437 | 2438 | \end{itemdescr}
|
|
2668 | 2669 | \remarks
|
2669 | 2670 | If any exception is thrown, the result of the expression \tcode{bool(*this)} remains unchanged. If an exception is thrown during the call to \tcode{T}'s constructor, the state of \tcode{v} is determined by the exception safety guarantee of \tcode{T}'s constructor. If an exception is thrown during the call to \tcode{T}'s assignment, the state of \tcode{*val} and \tcode{v} is determined by the exception safety guarantee of \tcode{T}'s assignment.
|
2670 | 2671 | This function shall not participate in overload resolution unless
|
2671 |
| -\tcode{is_same_v<optional<T>, decay_t<U>>} is \tcode{false}, |
| 2672 | +\tcode{is_same_v<remove_cvref_t<U>, optional>} is \tcode{false}, |
2672 | 2673 | \tcode{conjunction_v<is_scalar<T>, is_same<T, decay_t<U>>>} is \tcode{false},
|
2673 | 2674 | \tcode{is_constructible_v<T, U>} is \tcode{true}, and
|
2674 | 2675 | \tcode{is_assignable_v<T\&, U>} is \tcode{true}.
|
|
3975 | 3976 |
|
3976 | 3977 | \pnum
|
3977 | 3978 | \remarks
|
3978 |
| -This function shall not participate in overload resolution |
3979 |
| -unless \tcode{sizeof...(Types)} is nonzero, |
3980 |
| -unless \tcode{is_same_v<decay_t<T>, variant>} is \tcode{false}, |
3981 |
| -unless \tcode{decay_t<T>} is neither |
3982 |
| -a specialization of \tcode{in_place_type_t} |
3983 |
| -nor a specialization of \tcode{in_place_index_t}, |
3984 |
| -unless \tcode{is_constructible_v<$\tcode{T}_j$, T>} is \tcode{true}, |
3985 |
| -and unless the expression |
3986 |
| -\tcode{\placeholdernc{FUN}(}\brk\tcode{std::forward<T>(t))} (with \tcode{\placeholdernc{FUN}} |
3987 |
| -being the above-mentioned set of imaginary functions) is well-formed. |
| 3979 | +This function shall not participate in overload resolution unless |
| 3980 | +\begin{itemize} |
| 3981 | +\item |
| 3982 | + \tcode{sizeof...(Types)} is nonzero, |
| 3983 | + |
| 3984 | +\item |
| 3985 | + \tcode{is_same_v<remove_cvref_t<T>, variant>} is \tcode{false}, |
| 3986 | + |
| 3987 | +\item |
| 3988 | + \tcode{remove_cvref_t<T>} is neither a specialization |
| 3989 | + of \tcode{in_place_type_t} nor a specialization |
| 3990 | + of \tcode{in_place_index_t}, |
| 3991 | + |
| 3992 | +\item |
| 3993 | + \tcode{is_constructible_v<$\tcode{T}_j$, T>} is \tcode{true}, and |
| 3994 | + |
| 3995 | +\item |
| 3996 | + the expression \tcode{\placeholdernc{FUN}(}\brk\tcode{std::forward<T>(t))} |
| 3997 | + (with \tcode{\placeholdernc{FUN}} being the above-mentioned set of |
| 3998 | + imaginary functions) is well-formed. |
| 3999 | +\end{itemize} |
3988 | 4000 |
|
3989 | 4001 | \pnum
|
3990 | 4002 | \begin{note}
|
|
4268 | 4280 | \pnum
|
4269 | 4281 | \remarks
|
4270 | 4282 | This function shall not participate in overload resolution unless
|
4271 |
| -\tcode{is_same_v<decay_t<T>, variant>} is \tcode{false}, unless |
4272 |
| -\tcode{is_assignable_v<$\tcode{T}_j$\&, T> \&\& is_constructible_v<$\tcode{T}_j$, T>} is \tcode{true}, |
4273 |
| -and unless the expression \tcode{\placeholdernc{FUN}(std::forward<T>(t))} (with |
4274 |
| -\tcode{\placeholdernc{FUN}} being the above-mentioned set of imaginary functions) |
4275 |
| -is well-formed. |
| 4283 | +\begin{itemize} |
| 4284 | +\item |
| 4285 | + \tcode{is_same_v<remove_cvref_t<T>, variant>} is \tcode{false}, |
| 4286 | + |
| 4287 | +\item |
| 4288 | + \tcode{is_assignable_v<$\tcode{T}_j$\&, T> \&\& is_constructible_v<$\tcode{T}_j$, T>} |
| 4289 | + is \tcode{true}, and |
| 4290 | + |
| 4291 | +\item |
| 4292 | + the expression \tcode{\placeholdernc{FUN}(std::forward<T>(t))} |
| 4293 | + (with \tcode{\placeholdernc{FUN}} being the above-mentioned set |
| 4294 | + of imaginary functions) is well-formed. |
| 4295 | +\end{itemize} |
4276 | 4296 |
|
4277 | 4297 | \pnum
|
4278 | 4298 | \begin{note}
|
|
5502 | 5522 |
|
5503 | 5523 | \begin{itemdescr}
|
5504 | 5524 | \pnum
|
5505 |
| -Let \tcode{U} be the type \tcode{remove_cv_t<remove_reference_t<T>>}. |
| 5525 | +Let \tcode{U} be the type \tcode{remove_cvref_t<T>}. |
5506 | 5526 |
|
5507 | 5527 | \pnum
|
5508 | 5528 | \requires
|
@@ -12800,23 +12820,23 @@
|
12800 | 12820 | \begin{itemize}
|
12801 | 12821 | \item \tcode{(t$_1$.*f)(t$_2$, $\dotsc$, t$_N$)} when \tcode{f} is a pointer to a
|
12802 | 12822 | member function of a class \tcode{T}
|
12803 |
| -and \tcode{is_base_of_v<T, decay_t<decltype(t$_1$)>>} is \tcode{true}; |
| 12823 | +and \tcode{is_base_of_v<T, remove_reference_t<decltype(t$_1$)>>} is \tcode{true}; |
12804 | 12824 |
|
12805 | 12825 | \item \tcode{(t$_1$.get().*f)(t$_2$, $\dotsc$, t$_N$)} when \tcode{f} is a pointer to a
|
12806 | 12826 | member function of a class \tcode{T}
|
12807 |
| -and \tcode{decay_t<decltype(t$_1$)>} is a specialization of \tcode{reference_wrapper}; |
| 12827 | +and \tcode{remove_cvref_t<decltype(t$_1$)>} is a specialization of \tcode{reference_wrapper}; |
12808 | 12828 |
|
12809 | 12829 | \item \tcode{((*t$_1$).*f)(t$_2$, $\dotsc$, t$_N$)} when \tcode{f} is a pointer to a
|
12810 | 12830 | member function of a class \tcode{T}
|
12811 | 12831 | and \tcode{t$_1$} does not satisfy the previous two items;
|
12812 | 12832 |
|
12813 | 12833 | \item \tcode{t$_1$.*f} when \tcode{N == 1} and \tcode{f} is a pointer to
|
12814 | 12834 | data member of a class \tcode{T}
|
12815 |
| -and \tcode{is_base_of_v<T, decay_t<decltype(t$_1$)>>} is \tcode{true}; |
| 12835 | +and \tcode{is_base_of_v<T, remove_reference_t<decltype(t$_1$)>>} is \tcode{true}; |
12816 | 12836 |
|
12817 | 12837 | \item \tcode{t$_1$.get().*f} when \tcode{N == 1} and \tcode{f} is a pointer to
|
12818 | 12838 | data member of a class \tcode{T}
|
12819 |
| -and \tcode{decay_t<decltype(t$_1$)>} is a specialization of \tcode{reference_wrapper}; |
| 12839 | +and \tcode{remove_cvref_t<decltype(t$_1$)>} is a specialization of \tcode{reference_wrapper}; |
12820 | 12840 |
|
12821 | 12841 | \item \tcode{(*t$_1$).*f} when \tcode{N == 1} and \tcode{f} is a pointer to
|
12822 | 12842 | data member of a class \tcode{T}
|
|
0 commit comments