diff options
Diffstat (limited to 'libcxx/include/__ranges/concepts.h')
| -rw-r--r-- | libcxx/include/__ranges/concepts.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libcxx/include/__ranges/concepts.h b/libcxx/include/__ranges/concepts.h index 0590863138ed..87df1d18baf8 100644 --- a/libcxx/include/__ranges/concepts.h +++ b/libcxx/include/__ranges/concepts.h @@ -27,21 +27,26 @@ #include <type_traits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD -#if !defined(_LIBCPP_HAS_NO_CONCEPTS) +#if _LIBCPP_STD_VER > 17 namespace ranges { + // [range.range] + template <class _Tp> concept range = requires(_Tp& __t) { ranges::begin(__t); // sometimes equality-preserving ranges::end(__t); }; + template <class _Tp> + concept input_range = range<_Tp> && input_iterator<iterator_t<_Tp>>; + template<class _Range> concept borrowed_range = range<_Range> && (is_lvalue_reference_v<_Range> || enable_borrowed_range<remove_cvref_t<_Range>>); @@ -94,9 +99,6 @@ namespace ranges { concept output_range = range<_Rp> && output_iterator<iterator_t<_Rp>, _Tp>; template <class _Tp> - concept input_range = range<_Tp> && input_iterator<iterator_t<_Tp>>; - - template <class _Tp> concept forward_range = input_range<_Tp> && forward_iterator<iterator_t<_Tp>>; template <class _Tp> @@ -133,7 +135,7 @@ namespace ranges { } // namespace ranges -#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS) +#endif // _LIBCPP_STD_VER > 17 _LIBCPP_END_NAMESPACE_STD |
