[libc++] Implements ranges::enable_borrowed_range
This is the initial patch to implement ranges in libc++.
Implements parts of:
- P0896R4 One Ranges Proposal
- P1870 forwarding-range is too subtle
- LWG3379 in several library names is misleading
Reviewed By: ldionne, #libc, cjdb, zoecarver, Quuxplusone
Differential Revision: https://reviews.llvm.org/D90999
GitOrigin-RevId: 01ace074fcb6a497fc16b1578fc10480dc7d563d
diff --git a/include/string_view b/include/string_view
index 3177fcd..e957a64 100644
--- a/include/string_view
+++ b/include/string_view
@@ -19,6 +19,9 @@
template<class charT, class traits = char_traits<charT>>
class basic_string_view;
+ template<class charT, class traits>
+ inline constexpr bool ranges::enable_borrowed_range<basic_string_view<charT, traits>> = true; // C++20
+
// 7.9, basic_string_view non-member comparison functions
template<class charT, class traits>
constexpr bool operator==(basic_string_view<charT, traits> x,
@@ -179,6 +182,7 @@
*/
#include <__config>
+#include <__ranges/enable_borrowed_range.h>
#include <__string>
#include <iosfwd>
#include <algorithm>
@@ -649,6 +653,10 @@
size_type __size;
};
+#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_RANGES)
+template <class _CharT, class _Traits>
+inline constexpr bool ranges::enable_borrowed_range<basic_string_view<_CharT, _Traits> > = true;
+#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_RANGES)
// [string.view.comparison]
// operator ==