Implement n4169 - Add invoke function template

llvm-svn: 242195
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 5be45129a435bd66e3a4789ef3ac6bd32dc70e0b
diff --git a/include/functional b/include/functional
index 90972bc..5ee9417 100644
--- a/include/functional
+++ b/include/functional
@@ -2447,6 +2447,15 @@
 };
 #endif
 
+
+#if _LIBCPP_STD_VER > 14
+template <class _Fn, class ..._Args>
+result_of_t<_Fn&&(_Args&&...)>
+invoke(_Fn&& __f, _Args&&... __args) {
+    return __invoke(_VSTD::forward<_Fn>(__f), _VSTD::forward<_Args>(__args)...);
+}
+#endif
+
 // struct hash<T*> in <memory>
 
 _LIBCPP_END_NAMESPACE_STD