13490
13490
constexpr invoke_result_t<F, Args...> invoke(F&& f, Args&&... args)
13491
13491
noexcept(is_nothrow_invocable_v<F, Args...>);
13492
13492
13493
+ template<class R, class F, class... Args>
13494
+ constexpr R invoke_r(F&& f, Args&&... args)
13495
+ noexcept(is_nothrow_invocable_r_v<R, F, Args...>);
13496
+
13493
13497
// \ref{refwrap}, \tcode{reference_wrapper}
13494
13498
template<class T> class reference_wrapper;
13495
13499
13793
13797
a given standard library function template have the same type
13794
13798
if the types of their corresponding state entities are the same.
13795
13799
13796
- \rSec2[func.invoke]{Function template \tcode{invoke}}
13800
+ \rSec2[func.invoke]{\tcode{invoke} functions }
13797
13801
\indexlibraryglobal{invoke}%
13798
13802
\indexlibrary{invoke@\tcode{\placeholder{INVOKE}}}%
13799
13803
\begin{itemdecl}
@@ -13803,11 +13807,32 @@
13803
13807
\end{itemdecl}
13804
13808
13805
13809
\begin{itemdescr}
13810
+ \pnum
13811
+ \constraints
13812
+ \tcode{is_invocable_v<F, Args...>} is \tcode{true}.
13813
+
13806
13814
\pnum
13807
13815
\returns
13808
13816
\tcode{\placeholdernc{INVOKE}(std::forward<F>(f), std::forward<Args>(args)...)}\iref{func.require}.
13809
13817
\end{itemdescr}
13810
13818
13819
+ \indexlibraryglobal{invoke_r}%
13820
+ \begin{itemdecl}
13821
+ template<class R, class F, class... Args>
13822
+ constexpr R invoke_r(F&& f, Args&&... args)
13823
+ noexcept(is_nothrow_invocable_r_v<R, F, Args...>);
13824
+ \end{itemdecl}
13825
+
13826
+ \begin{itemdescr}
13827
+ \pnum
13828
+ \constraints
13829
+ \tcode{is_invocable_r_v<R, F, Args...>} is \tcode{true}.
13830
+
13831
+ \pnum
13832
+ \returns
13833
+ \tcode{\placeholdernc{INVOKE}<R>(std::forward<F>(f), std::forward<Args>(args)...)}\iref{func.require}.
13834
+ \end{itemdescr}
13835
+
13811
13836
\rSec2[refwrap]{Class template \tcode{reference_wrapper}}
13812
13837
13813
13838
\rSec3[refwrap.general]{General}
0 commit comments