13096
13096
constexpr invoke_result_t<F, Args...> invoke(F&& f, Args&&... args)
13097
13097
noexcept(is_nothrow_invocable_v<F, Args...>);
13098
13098
13099
+ template<class R, class F, class... Args>
13100
+ constexpr R invoke_r(F&& f, Args&&... args)
13101
+ noexcept(is_nothrow_invocable_r_v<R, F, Args...>);
13102
+
13099
13103
// \ref{refwrap}, \tcode{reference_wrapper}
13100
13104
template<class T> class reference_wrapper;
13101
13105
13399
13403
a given standard library function template have the same type
13400
13404
if the types of their corresponding state entities are the same.
13401
13405
13402
- \rSec2[func.invoke]{Function template \tcode{invoke}}
13406
+ \rSec2[func.invoke]{\tcode{invoke} functions }
13403
13407
\indexlibraryglobal{invoke}%
13404
13408
\indexlibrary{invoke@\tcode{\placeholder{INVOKE}}}%
13405
13409
\begin{itemdecl}
@@ -13409,11 +13413,32 @@
13409
13413
\end{itemdecl}
13410
13414
13411
13415
\begin{itemdescr}
13416
+ \pnum
13417
+ \constraints
13418
+ \tcode{is_invocable_v<F, Args...>} is \tcode{true}.
13419
+
13412
13420
\pnum
13413
13421
\returns
13414
13422
\tcode{\placeholdernc{INVOKE}(std::forward<F>(f), std::forward<Args>(args)...)}\iref{func.require}.
13415
13423
\end{itemdescr}
13416
13424
13425
+ \indexlibraryglobal{invoke_r}%
13426
+ \begin{itemdecl}
13427
+ template<class R, class F, class... Args>
13428
+ constexpr R invoke_r(F&& f, Args&&... args)
13429
+ noexcept(is_nothrow_invocable_r_v<R, F, Args...>);
13430
+ \end{itemdecl}
13431
+
13432
+ \begin{itemdescr}
13433
+ \pnum
13434
+ \constraints
13435
+ \tcode{is_invocable_r_v<R, F, Args...>} is \tcode{true}.
13436
+
13437
+ \pnum
13438
+ \returns
13439
+ \tcode{\placeholdernc{INVOKE}<R>(std::forward<F>(f), std::forward<Args>(args)...)}\iref{func.require}.
13440
+ \end{itemdescr}
13441
+
13417
13442
\rSec2[refwrap]{Class template \tcode{reference_wrapper}}
13418
13443
13419
13444
\rSec3[refwrap.general]{General}
0 commit comments