@@ -10594,12 +10594,17 @@
10594
10594
10595
10595
// \ref{func.not.fn}, function template \tcode{not_fn}
10596
10596
template<class F> constexpr @\unspec@ not_fn(F&& f); // freestanding
10597
+ template<auto f> constexpr @\unspec@ not_fn() noexcept; // freestanding
10597
10598
10598
10599
// \ref{func.bind.partial}, function templates \tcode{bind_front} and \tcode{bind_back}
10599
10600
template<class F, class... Args>
10600
10601
constexpr @\unspec@ bind_front(F&&, Args&&...); // freestanding
10602
+ template<auto f, class... Args>
10603
+ constexpr @\unspec@ bind_front(Args&&...); // freestanding
10601
10604
template<class F, class... Args>
10602
10605
constexpr @\unspec@ bind_back(F&&, Args&&...); // freestanding
10606
+ template<auto f, class... Args>
10607
+ constexpr @\unspec@ bind_back(Args&&...); // freestanding
10603
10608
10604
10609
// \ref{func.bind}, bind
10605
10610
template<class T> struct is_bind_expression; // freestanding
12303
12308
Any exception thrown by the initialization of \tcode{fd}.
12304
12309
\end{itemdescr}
12305
12310
12311
+ \indexlibraryglobal{not_fn}%
12312
+ \begin{itemdecl}
12313
+ template<auto f> constexpr @\unspec@ not_fn() noexcept;
12314
+ \end{itemdecl}
12315
+
12316
+ \begin{itemdescr}
12317
+ \pnum
12318
+ In the text that follows:
12319
+ \begin{itemize}
12320
+ \item
12321
+ \tcode{F} is the type of \tcode{f},
12322
+ \item
12323
+ \tcode{g} is a value of the result of a \tcode{not_fn} invocation,
12324
+ \item
12325
+ \tcode{call_args} is an argument pack
12326
+ used in a function call expression\iref{expr.call} of \tcode{g}.
12327
+ \end{itemize}
12328
+
12329
+ \pnum
12330
+ \mandates
12331
+ If \tcode{is_pointer_v<F> || is_member_pointer_v<F>} is \tcode{true},
12332
+ then \tcode{f != nullptr} is \tcode{true}.
12333
+
12334
+ \pnum
12335
+ \returns
12336
+ A perfect forwarding call wrapper\iref{func.require} \tcode{g} that
12337
+ does not have state entities, and
12338
+ has the call pattern \tcode{!invoke(f, call_args...)}.
12339
+ \end{itemdescr}
12340
+
12306
12341
\rSec2[func.bind.partial]{Function templates \tcode{bind_front} and \tcode{bind_back}}
12307
12342
12308
12343
\indexlibraryglobal{bind_front}%
12371
12406
the initialization of the state entities of \tcode{g}\iref{func.def}.
12372
12407
\end{itemdescr}
12373
12408
12409
+ \indexlibraryglobal{bind_front}%
12410
+ \indexlibraryglobal{bind_back}%
12411
+ \begin{itemdecl}
12412
+ template<auto f, class... Args>
12413
+ constexpr @\unspec@ bind_front(Args&&... args);
12414
+ template<auto f, class... Args>
12415
+ constexpr @\unspec@ bind_back(Args&&... args);
12416
+ \end{itemdecl}
12417
+
12418
+ \begin{itemdescr}
12419
+ \pnum
12420
+ Within this subclause:
12421
+ \begin{itemize}
12422
+ \item
12423
+ \tcode{F} is the type of \tcode{f},
12424
+ \item
12425
+ \tcode{g} is a value of the result of
12426
+ a \tcode{bind_front} or \tcode{bind_back} invocation,
12427
+ \item
12428
+ \tcode{BoundArgs} is a pack that denotes \tcode{decay_t<Args>...},
12429
+ \item
12430
+ \tcode{bound_args} is a pack of bound argument entities of
12431
+ \tcode{g}\iref{func.def} of types \tcode{BoundArgs...},
12432
+ direct-non-list-initialized with \tcode{std::forward<Args>(args)...},
12433
+ respectively, and
12434
+ \item
12435
+ \tcode{call_args} is an argument pack used in
12436
+ a function call expression\iref{expr.call} of \tcode{g}.
12437
+ \end{itemize}
12438
+
12439
+ \pnum
12440
+ \mandates
12441
+ \begin{itemize}
12442
+ \item
12443
+ \tcode{(is_constructible_v<BoundArgs, Args> \&\& ...)} is \tcode{true}, and
12444
+ \item
12445
+ \tcode{(is_move_constructible_v<BoundArgs> \&\& ...)} is \tcode{true}, and
12446
+ \item
12447
+ if \tcode{is_pointer_v<F> || is_member_pointer_v<F>} is \tcode{true},
12448
+ then \tcode{f != nullptr} is \tcode{true}.
12449
+ \end{itemize}
12450
+
12451
+ \pnum
12452
+ \expects
12453
+ For each $\tcode{T}_i$ in \tcode{BoundArgs},
12454
+ $\tcode{T}_i$ meets the \oldconcept{MoveConstructible} requirements.
12455
+
12456
+ \pnum
12457
+ \returns
12458
+ A perfect forwarding call wrapper\iref{func.require} \tcode{g} that
12459
+ does not have a target object, and has the call pattern:
12460
+ \begin{itemize}
12461
+ \item
12462
+ \tcode{invoke(f, bound_args..., call_args...)}
12463
+ for a \tcode{bind_front} invocation, or
12464
+ \item
12465
+ \tcode{invoke(f, call_args..., bound_args...)}
12466
+ for a \tcode{bind_back} invocation.
12467
+ \end{itemize}
12468
+
12469
+ \pnum
12470
+ throws
12471
+ Any exception thrown by the initialization of \tcode{bound_args}.
12472
+ \end{itemdescr}
12473
+
12374
12474
\rSec2[func.bind]{Function object binders}%
12375
12475
12376
12476
\rSec3[func.bind.general]{General}%
0 commit comments