|
5022 | 5022 |
|
5023 | 5023 | // \ref{variant.swap}, swap
|
5024 | 5024 | constexpr void swap(variant&) noexcept(@\seebelow@);
|
| 5025 | + |
| 5026 | + // \ref{variant.visit}, visitation |
| 5027 | + template<class Self, class Visitor> |
| 5028 | + constexpr decltype(auto) visit(this Self&&, Visitor&&); |
| 5029 | + template<class R, class Self, class Visitor> |
| 5030 | + constexpr R visit(this Self&&, Visitor&&); |
5025 | 5031 | };
|
5026 | 5032 | }
|
5027 | 5033 | \end{codeblock}
|
|
6140 | 6146 | no complexity requirements.
|
6141 | 6147 | \end{itemdescr}
|
6142 | 6148 |
|
| 6149 | +\indexlibrarymember{visit}{variant}% |
| 6150 | +\begin{itemdecl} |
| 6151 | +template<class Self, class Visitor> |
| 6152 | + constexpr decltype(auto) visit(this Self&& self, Visitor&& vis); |
| 6153 | +\end{itemdecl} |
| 6154 | + |
| 6155 | +\begin{itemdescr} |
| 6156 | +\pnum |
| 6157 | +Let \tcode{V} be |
| 6158 | +\tcode{\exposid{OVERRIDE_REF}(Self\&\&, \exposid{COPY_CONST}(remove_reference_t<Self>, variant))}\iref{forward}. |
| 6159 | + |
| 6160 | +\pnum |
| 6161 | +\constraints |
| 6162 | +The call to \tcode{visit} does not use |
| 6163 | +an explicit \grammarterm{template-argument-list} that |
| 6164 | +begins with a type \grammarterm{template-argument}. |
| 6165 | + |
| 6166 | +\pnum |
| 6167 | +\effects |
| 6168 | +Equivalent to: \tcode{return std::visit(std::forward<Visitor>(vis), (V)self);} |
| 6169 | +\end{itemdescr} |
| 6170 | + |
| 6171 | +\indexlibrarymember{visit}{variant}% |
| 6172 | +\begin{itemdecl} |
| 6173 | +template<class R, class Self, class Visitor> |
| 6174 | + constexpr R visit(this Self&& self, Visitor&& vis); |
| 6175 | +\end{itemdecl} |
| 6176 | + |
| 6177 | +\begin{itemdescr} |
| 6178 | +\pnum |
| 6179 | +Let \tcode{V} be |
| 6180 | +\tcode{\exposid{OVERRIDE_REF}(Self\&\&, \exposid{COPY_CONST}(remove_reference_t<Self>, variant))}\iref{forward}. |
| 6181 | + |
| 6182 | +\pnum |
| 6183 | +\effects |
| 6184 | +Equivalent to: \tcode{return std::visit<R>(std::forward<Visitor>(vis), (V)self);} |
| 6185 | +\end{itemdescr} |
| 6186 | + |
6143 | 6187 | \rSec2[variant.monostate]{Class \tcode{monostate}}%
|
6144 | 6188 | \indexlibraryglobal{monostate}%
|
6145 | 6189 |
|
|
15022 | 15066 | // \ref{format.arg}, class template \tcode{basic_format_arg}
|
15023 | 15067 | template<class Context> class basic_format_arg;
|
15024 | 15068 |
|
15025 |
| - template<class Visitor, class Context> |
15026 |
| - decltype(auto) visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg); |
15027 |
| - |
15028 | 15069 | // \ref{format.arg.store}, class template \exposid{format-arg-store}
|
15029 | 15070 | template<class Context, class... Args> class @\exposidnc{format-arg-store}@; // \expos
|
15030 | 15071 |
|
@@ -16884,14 +16925,14 @@
|
16884 | 16925 |
|
16885 | 16926 | // Formats an \tcode{S} with width given by the argument \tcode{width_arg_id}.
|
16886 | 16927 | auto format(S s, format_context& ctx) const {
|
16887 |
| - int width = visit_format_arg([](auto value) -> int { |
| 16928 | + int width = ctx.arg(width_arg_id).visit([](auto value) -> int { |
16888 | 16929 | if constexpr (!is_integral_v<decltype(value)>)
|
16889 | 16930 | throw format_error("width is not integral");
|
16890 | 16931 | else if (value < 0 || value > numeric_limits<int>::max())
|
16891 | 16932 | throw format_error("invalid width");
|
16892 | 16933 | else
|
16893 | 16934 | return value;
|
16894 |
| - }, ctx.arg(width_arg_id)); |
| 16935 | + }); |
16895 | 16936 | return format_to(ctx.out(), "{0:x<{1}}", s.value, width);
|
16896 | 16937 | }
|
16897 | 16938 | };
|
|
17513 | 17554 | basic_format_arg() noexcept;
|
17514 | 17555 |
|
17515 | 17556 | explicit operator bool() const noexcept;
|
| 17557 | + |
| 17558 | + template<class Visitor> |
| 17559 | + decltype(auto) visit(this basic_format_arg arg, Visitor&& vis); |
| 17560 | + template<class R, class Visitor> |
| 17561 | + R visit(this basic_format_arg arg, Visitor&& vis); |
17516 | 17562 | };
|
17517 | 17563 | }
|
17518 | 17564 | \end{codeblock}
|
|
17618 | 17664 | \tcode{!holds_alternative<monostate>(value)}.
|
17619 | 17665 | \end{itemdescr}
|
17620 | 17666 |
|
| 17667 | +\indexlibrarymember{visit}{basic_format_arg}% |
| 17668 | +\begin{itemdecl} |
| 17669 | +template<class Visitor> |
| 17670 | + decltype(auto) visit(this basic_format_arg arg, Visitor&& vis); |
| 17671 | +\end{itemdecl} |
| 17672 | + |
| 17673 | +\begin{itemdescr} |
| 17674 | +\pnum |
| 17675 | +\effects |
| 17676 | +Equivalent to: \tcode{return arg.value.visit(std::forward<Visitor>(vis));} |
| 17677 | +\end{itemdescr} |
| 17678 | + |
| 17679 | +\indexlibrarymember{visit}{basic_format_arg}% |
| 17680 | +\begin{itemdecl} |
| 17681 | +template<class R, class Visitor> |
| 17682 | + R visit(this basic_format_arg arg, Visitor&& vis); |
| 17683 | +\end{itemdecl} |
| 17684 | + |
| 17685 | +\begin{itemdescr} |
| 17686 | +\pnum |
| 17687 | +\effects |
| 17688 | +Equivalent to: \tcode{return arg.value.visit<R>(std::forward<Visitor>(vis));} |
| 17689 | +\end{itemdescr} |
| 17690 | + |
17621 | 17691 | \pnum
|
17622 | 17692 | The class \tcode{handle} allows formatting an object of a user-defined type.
|
17623 | 17693 |
|
|
17689 | 17759 | Equivalent to: \tcode{format_(parse_ctx, format_ctx, ptr_);}
|
17690 | 17760 | \end{itemdescr}
|
17691 | 17761 |
|
17692 |
| -\indexlibraryglobal{visit_format_arg}% |
17693 |
| -\begin{itemdecl} |
17694 |
| -template<class Visitor, class Context> |
17695 |
| - decltype(auto) visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg); |
17696 |
| -\end{itemdecl} |
17697 |
| - |
17698 |
| -\begin{itemdescr} |
17699 |
| -\pnum |
17700 |
| -\effects |
17701 |
| -Equivalent to: \tcode{return visit(std::forward<Visitor>(vis), arg.value);} |
17702 |
| -\end{itemdescr} |
17703 |
| - |
17704 | 17762 | \rSec3[format.arg.store]{Class template \exposid{format-arg-store}}
|
17705 | 17763 |
|
17706 | 17764 | \begin{codeblock}
|
|
0 commit comments