Skip to content

Commit 04cf6ed

Browse files
authored
Merge 2023-06 LWG Motion 21
P2637R3 Member visit
2 parents 3e737c3 + a9fe18c commit 04cf6ed

File tree

3 files changed

+105
-19
lines changed

3 files changed

+105
-19
lines changed

source/future.tex

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2064,6 +2064,34 @@
20642064
\end{note}
20652065
\end{itemdescr}
20662066

2067+
\rSec1[depr.format]{Deprecated formatting}
2068+
2069+
\rSec2[depr.format.syn]{Header \tcode{<format>} synopsis}
2070+
2071+
\pnum
2072+
The header \libheaderref{format}{format.syn} has the following additions:
2073+
2074+
\begin{codeblock}
2075+
namespace std {
2076+
template<class Visitor, class Context>
2077+
decltype(auto) visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg);
2078+
}
2079+
\end{codeblock}
2080+
2081+
\rSec2[depr.format.arg]{Formatting arguments}
2082+
2083+
\indexlibraryglobal{visit_format_arg}%
2084+
\begin{itemdecl}
2085+
template<class Visitor, class Context>
2086+
decltype(auto) visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg);
2087+
\end{itemdecl}
2088+
2089+
\begin{itemdescr}
2090+
\pnum
2091+
\effects
2092+
Equivalent to: \tcode{return visit(std::forward<Visitor>(vis), arg.value);}
2093+
\end{itemdescr}
2094+
20672095
\rSec1[depr.locale.stdcvt]{Deprecated standard code conversion facets}
20682096

20692097
\rSec2[depr.locale.stdcvt.general]{General}

source/support.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@
628628
#define @\defnlibxname{cpp_lib_filesystem}@ 201703L // also in \libheader{filesystem}
629629
#define @\defnlibxname{cpp_lib_flat_map}@ 202207L // also in \libheader{flat_map}
630630
#define @\defnlibxname{cpp_lib_flat_set}@ 202207L // also in \libheader{flat_set}
631-
#define @\defnlibxname{cpp_lib_format}@ 202305L // also in \libheader{format}
631+
#define @\defnlibxname{cpp_lib_format}@ 202306L // also in \libheader{format}
632632
#define @\defnlibxname{cpp_lib_format_ranges}@ 202207L // also in \libheader{format}
633633
#define @\defnlibxname{cpp_lib_formatters}@ 202302L // also in \libheader{stacktrace}, \libheader{thread}
634634
#define @\defnlibxname{cpp_lib_forward_like}@ 202207L // freestanding, also in \libheader{utility}
@@ -779,7 +779,7 @@
779779
#define @\defnlibxname{cpp_lib_unordered_map_try_emplace}@ 201411L // also in \libheader{unordered_map}
780780
#define @\defnlibxname{cpp_lib_unreachable}@ 202202L // freestanding, also in \libheader{utility}
781781
#define @\defnlibxname{cpp_lib_unwrap_ref}@ 201811L // freestanding, also in \libheader{type_traits}
782-
#define @\defnlibxname{cpp_lib_variant}@ 202106L // also in \libheader{variant}
782+
#define @\defnlibxname{cpp_lib_variant}@ 202306L // also in \libheader{variant}
783783
#define @\defnlibxname{cpp_lib_void_t}@ 201411L // freestanding, also in \libheader{type_traits}
784784
\end{codeblock}
785785

source/utilities.tex

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5022,6 +5022,12 @@
50225022

50235023
// \ref{variant.swap}, swap
50245024
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&&);
50255031
};
50265032
}
50275033
\end{codeblock}
@@ -6140,6 +6146,44 @@
61406146
no complexity requirements.
61416147
\end{itemdescr}
61426148

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+
61436187
\rSec2[variant.monostate]{Class \tcode{monostate}}%
61446188
\indexlibraryglobal{monostate}%
61456189

@@ -15022,9 +15066,6 @@
1502215066
// \ref{format.arg}, class template \tcode{basic_format_arg}
1502315067
template<class Context> class basic_format_arg;
1502415068

15025-
template<class Visitor, class Context>
15026-
decltype(auto) visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg);
15027-
1502815069
// \ref{format.arg.store}, class template \exposid{format-arg-store}
1502915070
template<class Context, class... Args> class @\exposidnc{format-arg-store}@; // \expos
1503015071

@@ -16884,14 +16925,14 @@
1688416925

1688516926
// Formats an \tcode{S} with width given by the argument \tcode{width_arg_id}.
1688616927
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 {
1688816929
if constexpr (!is_integral_v<decltype(value)>)
1688916930
throw format_error("width is not integral");
1689016931
else if (value < 0 || value > numeric_limits<int>::max())
1689116932
throw format_error("invalid width");
1689216933
else
1689316934
return value;
16894-
}, ctx.arg(width_arg_id));
16935+
});
1689516936
return format_to(ctx.out(), "{0:x<{1}}", s.value, width);
1689616937
}
1689716938
};
@@ -17513,6 +17554,11 @@
1751317554
basic_format_arg() noexcept;
1751417555

1751517556
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);
1751617562
};
1751717563
}
1751817564
\end{codeblock}
@@ -17618,6 +17664,30 @@
1761817664
\tcode{!holds_alternative<monostate>(value)}.
1761917665
\end{itemdescr}
1762017666

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+
1762117691
\pnum
1762217692
The class \tcode{handle} allows formatting an object of a user-defined type.
1762317693

@@ -17689,18 +17759,6 @@
1768917759
Equivalent to: \tcode{format_(parse_ctx, format_ctx, ptr_);}
1769017760
\end{itemdescr}
1769117761

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-
1770417762
\rSec3[format.arg.store]{Class template \exposid{format-arg-store}}
1770517763

1770617764
\begin{codeblock}

0 commit comments

Comments
 (0)