diff --git a/libstdc++-v3/include/bits/unicode.h b/libstdc++-v3/include/bits/unicode.h
index f1b2b359bdf8889e5aae2a646b79f920df33d04c..d35c83d009059bcd37493dae0bf627fb88cec1f9 100644
--- a/libstdc++-v3/include/bits/unicode.h
+++ b/libstdc++-v3/include/bits/unicode.h
@@ -714,15 +714,15 @@ inline namespace __v15_1_0
   };
 
   // Split a range into extended grapheme clusters.
-  template<ranges::forward_range _View>
+  template<ranges::forward_range _View> requires ranges::view<_View>
     class _Grapheme_cluster_view
     : public ranges::view_interface<_Grapheme_cluster_view<_View>>
     {
     public:
 
       constexpr
-      _Grapheme_cluster_view(const _View& __v)
-      : _M_begin(_Utf32_view(__v).begin())
+      _Grapheme_cluster_view(_View __v)
+      : _M_begin(_Utf32_view<_View>(std::move(__v)).begin())
       { }
 
       constexpr auto begin() const { return _M_begin; }
@@ -946,7 +946,7 @@ inline namespace __v15_1_0
     {
       if (__s.empty()) [[unlikely]]
 	return 0;
-      _Grapheme_cluster_view __gc(__s);
+      _Grapheme_cluster_view<basic_string_view<_CharT>> __gc(__s);
       auto __it = __gc.begin();
       const auto __end = __gc.end();
       size_t __n = __it.width();
@@ -964,7 +964,7 @@ inline namespace __v15_1_0
       if (__s.empty()) [[unlikely]]
 	return 0;
 
-      _Grapheme_cluster_view __gc(__s);
+      _Grapheme_cluster_view<basic_string_view<_CharT>> __gc(__s);
       auto __it = __gc.begin();
       const auto __end = __gc.end();
       size_t __n = __it.width();
@@ -1058,6 +1058,19 @@ inline namespace __v15_1_0
 
 } // namespace __unicode
 
+namespace ranges
+{
+  template<typename _To, typename _Range>
+    inline constexpr bool
+    enable_borrowed_range<std::__unicode::_Utf_view<_To, _Range>>
+      = enable_borrowed_range<_Range>;
+
+  template<typename _Range>
+    inline constexpr bool
+    enable_borrowed_range<std::__unicode::_Grapheme_cluster_view<_Range>>
+      = enable_borrowed_range<_Range>;
+} // namespace ranges
+
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std
 #endif // C++20