diff options
-rw-r--r-- | libcxx/include/functional | 8 | ||||
-rw-r--r-- | libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp | 5 | ||||
-rw-r--r-- | libcxx/www/cxx1z_status.html | 2 |
3 files changed, 10 insertions, 5 deletions
diff --git a/libcxx/include/functional b/libcxx/include/functional index def8a75f618..2cec0ea48bc 100644 --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -230,6 +230,10 @@ template<class Fn, class... BoundArgs> template<class R, class Fn, class... BoundArgs> unspecified bind(Fn&&, BoundArgs&&...); +template<class F, class... Args> + invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) // C++17 + noexcept(is_nothrow_invocable_v<F, Args...>); + namespace placeholders { // M is the implementation-defined number of placeholders extern unspecified _1; @@ -2769,9 +2773,9 @@ bind(_Fp&& __f, _BoundArgs&&... __bound_args) #if _LIBCPP_STD_VER > 14 template <class _Fn, class ..._Args> -result_of_t<_Fn&&(_Args&&...)> +invoke_result_t<_Fn, _Args...> invoke(_Fn&& __f, _Args&&... __args) - noexcept(noexcept(_VSTD::__invoke(_VSTD::forward<_Fn>(__f), _VSTD::forward<_Args>(__args)...))) + noexcept(is_nothrow_invocable_v<_Fn, _Args...>) { return _VSTD::__invoke(_VSTD::forward<_Fn>(__f), _VSTD::forward<_Args>(__args)...); } diff --git a/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp b/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp index 57350f16c40..0f25db0399f 100644 --- a/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp @@ -10,8 +10,9 @@ // <functional> -// template <class F, class ...Args> -// result_of_t<F&&(Args&&...)> invoke(F&&, Args&&...); +// template<class F, class... Args> +// invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) // C++17 +// noexcept(is_nothrow_invocable_v<_Fn, _Args...>); /// C++14 [func.def] 20.9.0 /// (1) The following definitions apply to this Clause: diff --git a/libcxx/www/cxx1z_status.html b/libcxx/www/cxx1z_status.html index 68a5d1ab919..a4ef75764ae 100644 --- a/libcxx/www/cxx1z_status.html +++ b/libcxx/www/cxx1z_status.html @@ -461,7 +461,7 @@ <tr><td><a href="https://wg21.link/LWG2802">2802</a></td><td>shared_ptr constructor requirements for a deleter</td><td>Kona</td><td></td></tr> <tr><td><a href="https://wg21.link/LWG2804">2804</a></td><td>Unconditional constexpr default constructor for istream_iterator</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2806">2806</a></td><td>Base class of bad_optional_access</td><td>Kona</td><td>Complete</td></tr> - <tr><td><a href="https://wg21.link/LWG2807">2807</a></td><td>std::invoke should use std::is_nothrow_callable</td><td>Kona</td><td></td></tr> + <tr><td><a href="https://wg21.link/LWG2807">2807</a></td><td>std::invoke should use std::is_nothrow_callable</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2812">2812</a></td><td>Range access is available with <string_view></td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2824">2824</a></td><td>list::sort should say that the order of elements is unspecified if an exception is thrown</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2826">2826</a></td><td>string_view iterators use old wording</td><td>Kona</td><td>Complete</td></tr> |