[libcxx][ranges] makes `ranges::subrange` a borrowed range

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

NOKEYCHECK=True
GitOrigin-RevId: 182ba8ab1b70a1604d4d29c214261456b589e730
diff --git a/include/ranges b/include/ranges
index d662e26..367ad60 100644
--- a/include/ranges
+++ b/include/ranges
@@ -93,6 +93,16 @@
     requires is_class_v<D> && same_as<D, remove_cv_t<D>>
   class view_interface;
 
+  // [range.subrange], sub-ranges
+  enum class subrange_kind : bool { unsized, sized };
+
+  template<input_or_output_iterator I, sentinel_for<I> S = I, subrange_kind K = see below>
+    requires (K == subrange_kind::sized || !sized_sentinel_for<S, I>)
+  class subrange;
+
+  template<class I, class S, subrange_kind K>
+    inline constexpr bool enable_borrowed_range<subrange<I, S, K>> = true;
+
   // [range.empty], empty view
   template<class T>
     requires is_object_v<T>