|
@@ -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)...);
|
|
|
}
|