[libcxx][ranges] adds concept `sized_range` and cleans up `ranges::size`

* adds `sized_range` and conformance tests
* moves `disable_sized_range` into namespace `std::ranges`
* removes explicit type parameter

Implements part of P0896 'The One Ranges Proposal'.

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

NOKEYCHECK=True
GitOrigin-RevId: d8fad6614923eea684f736e7d22fe54d5393f13f
diff --git a/include/__ranges/concepts.h b/include/__ranges/concepts.h
index 8c28df3..45dbfb5 100644
--- a/include/__ranges/concepts.h
+++ b/include/__ranges/concepts.h
@@ -6,10 +6,13 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_RANGES_CONCEPTS_H
-#define _LIBCPP_RANGES_CONCEPTS_H
+#ifndef _LIBCPP___RANGES_CONCEPTS_H
+#define _LIBCPP___RANGES_CONCEPTS_H
 
 #include <__config>
+#include <__iterator/concepts.h>
+#include <__ranges/access.h>
+#include <__ranges/size.h>
 #include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -50,6 +53,12 @@
   template <range _Rp>
   using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp> >;
 
+  // [range.sized]
+  template <class _Tp>
+  concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); };
+
+  // `disable_sized_range` defined in `<__ranges/size.h>`
+
   // [range.refinements], other range refinements
   template <class _Tp>
   concept input_range = range<_Tp> && input_iterator<iterator_t<_Tp> >;
@@ -61,11 +70,11 @@
   concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator<iterator_t<_Tp> >;
 
   template <class _Tp>
-  concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp> >;
-
-  template <class _Tp>
   concept random_access_range =
       bidirectional_range<_Tp> && random_access_iterator<iterator_t<_Tp> >;
+
+  template <class _Tp>
+  concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp> >;
 } // namespace ranges
 
 #endif // !defined(_LIBCPP_HAS_NO_RANGES)
@@ -76,4 +85,4 @@
 
 _LIBCPP_POP_MACROS
 
-#endif // _LIBCPP_RANGES_CONCEPTS_H
+#endif // _LIBCPP___RANGES_CONCEPTS_H
diff --git a/include/__ranges/size.h b/include/__ranges/size.h
index 555b14e..e947754 100644
--- a/include/__ranges/size.h
+++ b/include/__ranges/size.h
@@ -26,11 +26,11 @@
 
 #if !defined(_LIBCPP_HAS_NO_RANGES)
 
+// clang-format off
+namespace ranges {
 template<class>
 inline constexpr bool disable_sized_range = false;
 
-// clang-format off
-namespace ranges {
 // [range.prim.size]
 namespace __size {
   void size(auto&) = delete;
@@ -89,8 +89,7 @@
     template<__difference _Tp>
     [[nodiscard]] constexpr __integer_like auto operator()(_Tp&& __t) const
         noexcept(noexcept(ranges::end(__t) - ranges::begin(__t))) {
-      return _VSTD::__to_unsigned_like<range_difference_t<remove_cvref_t<_Tp>>>(
-          ranges::end(__t) - ranges::begin(__t));
+      return _VSTD::__to_unsigned_like(ranges::end(__t) - ranges::begin(__t));
     }
   };
 } // end namespace __size
diff --git a/include/ranges b/include/ranges
index 5401add..da443d7 100644
--- a/include/ranges
+++ b/include/ranges
@@ -50,6 +50,13 @@
   template<range R>
     using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<R>>;
 
+  // [range.sized]
+  template<class>
+    inline constexpr bool disable_sized_range = false;
+
+  template<class T>
+    concept sized_range = ...;
+
   // [range.view], views
   template<class T>
     inline constexpr bool enable_view = ...;