[libc++] Add ranges::in_fun_result

Add `ranges::in_fun_result`

Reviewed By: Quuxplusone, #libc, var-const

Spies: CaseyCarter, var-const, libcxx-commits, mgorny

Differential Revision: https://reviews.llvm.org/D116974

NOKEYCHECK=True
GitOrigin-RevId: 1e77b396ffe46b165bcdafdf79077a9d1da6c255
diff --git a/include/algorithm b/include/algorithm
index 21c0776..be10e30 100644
--- a/include/algorithm
+++ b/include/algorithm
@@ -19,6 +19,9 @@
 {
 
 namespace ranges {
+  template <class I, class F>
+    struct in_fun_result; // since C++20
+
   template <class I1, class I2>
     struct in_in_result;     // since C++20
 
@@ -27,6 +30,9 @@
 
   template <class I, class O1, class O2>
     struct in_out_out_result; // since C++20
+
+  template<class I, class O>
+    struct in_out_result; // since C++20
 }
 
 template <class InputIterator, class Predicate>
@@ -661,13 +667,6 @@
 template <class BidirectionalIterator, class Compare>
     constexpr bool     // constexpr in C++20
     prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp);
-
-namespace ranges {
-// [algorithms.results], algorithm result types
-template<class InputIterator, class OutputIterator>
-    struct in_out_result;
-}
-
 }  // std
 
 */
@@ -712,6 +711,7 @@
 #include <__algorithm/generate.h>
 #include <__algorithm/generate_n.h>
 #include <__algorithm/half_positive.h>
+#include <__algorithm/in_fun_result.h>
 #include <__algorithm/in_in_out_result.h>
 #include <__algorithm/in_in_result.h>
 #include <__algorithm/in_out_out_result.h>