diff options
Diffstat (limited to 'libcxx/include/__ranges/concepts.h')
-rw-r--r-- | libcxx/include/__ranges/concepts.h | 126 |
1 files changed, 59 insertions, 67 deletions
diff --git a/libcxx/include/__ranges/concepts.h b/libcxx/include/__ranges/concepts.h index b87a714..674a3f3 100644 --- a/libcxx/include/__ranges/concepts.h +++ b/libcxx/include/__ranges/concepts.h @@ -41,100 +41,92 @@ _LIBCPP_BEGIN_NAMESPACE_STD namespace ranges { - // [range.range] +// [range.range] - template <class _Tp> - concept range = requires(_Tp& __t) { - ranges::begin(__t); // sometimes equality-preserving - ranges::end(__t); - }; +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 _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>>); +template <class _Range> +concept borrowed_range = + range<_Range> && (is_lvalue_reference_v<_Range> || enable_borrowed_range<remove_cvref_t<_Range>>); - // `iterator_t` defined in <__ranges/access.h> +// `iterator_t` defined in <__ranges/access.h> - template <range _Rp> - using sentinel_t = decltype(ranges::end(std::declval<_Rp&>())); +template <range _Rp> +using sentinel_t = decltype(ranges::end(std::declval<_Rp&>())); - template <range _Rp> - using range_difference_t = iter_difference_t<iterator_t<_Rp>>; +template <range _Rp> +using range_difference_t = iter_difference_t<iterator_t<_Rp>>; - template <range _Rp> - using range_value_t = iter_value_t<iterator_t<_Rp>>; +template <range _Rp> +using range_value_t = iter_value_t<iterator_t<_Rp>>; - template <range _Rp> - using range_reference_t = iter_reference_t<iterator_t<_Rp>>; +template <range _Rp> +using range_reference_t = iter_reference_t<iterator_t<_Rp>>; - template <range _Rp> - using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp>>; +template <range _Rp> +using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp>>; - template <range _Rp> - using range_common_reference_t = iter_common_reference_t<iterator_t<_Rp>>; +template <range _Rp> +using range_common_reference_t = iter_common_reference_t<iterator_t<_Rp>>; - // [range.sized] - template <class _Tp> - concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); }; +// [range.sized] +template <class _Tp> +concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); }; - template<sized_range _Rp> - using range_size_t = decltype(ranges::size(std::declval<_Rp&>())); +template <sized_range _Rp> +using range_size_t = decltype(ranges::size(std::declval<_Rp&>())); - // `disable_sized_range` defined in `<__ranges/size.h>` +// `disable_sized_range` defined in `<__ranges/size.h>` - // [range.view], views +// [range.view], views - // `enable_view` defined in <__ranges/enable_view.h> - // `view_base` defined in <__ranges/enable_view.h> +// `enable_view` defined in <__ranges/enable_view.h> +// `view_base` defined in <__ranges/enable_view.h> - template <class _Tp> - concept view = - range<_Tp> && - movable<_Tp> && - enable_view<_Tp>; +template <class _Tp> +concept view = range<_Tp> && movable<_Tp> && enable_view<_Tp>; - template <class _Range> - concept __simple_view = - view<_Range> && range<const _Range> && - same_as<iterator_t<_Range>, iterator_t<const _Range>> && +template <class _Range> +concept __simple_view = + view<_Range> && range<const _Range> && same_as<iterator_t<_Range>, iterator_t<const _Range>> && same_as<sentinel_t<_Range>, sentinel_t<const _Range>>; - // [range.refinements], other range refinements - template <class _Rp, class _Tp> - concept output_range = range<_Rp> && output_iterator<iterator_t<_Rp>, _Tp>; +// [range.refinements], other range refinements +template <class _Rp, class _Tp> +concept output_range = range<_Rp> && output_iterator<iterator_t<_Rp>, _Tp>; - template <class _Tp> - concept forward_range = input_range<_Tp> && forward_iterator<iterator_t<_Tp>>; +template <class _Tp> +concept forward_range = input_range<_Tp> && forward_iterator<iterator_t<_Tp>>; - template <class _Tp> - concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator<iterator_t<_Tp>>; +template <class _Tp> +concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator<iterator_t<_Tp>>; - template <class _Tp> - concept random_access_range = - bidirectional_range<_Tp> && random_access_iterator<iterator_t<_Tp>>; +template <class _Tp> +concept random_access_range = bidirectional_range<_Tp> && random_access_iterator<iterator_t<_Tp>>; - template<class _Tp> - concept contiguous_range = - random_access_range<_Tp> && - contiguous_iterator<iterator_t<_Tp>> && - requires(_Tp& __t) { - { ranges::data(__t) } -> same_as<add_pointer_t<range_reference_t<_Tp>>>; - }; +template <class _Tp> +concept contiguous_range = random_access_range<_Tp> && contiguous_iterator<iterator_t<_Tp>> && requires(_Tp& __t) { + { ranges::data(__t) } -> same_as<add_pointer_t<range_reference_t<_Tp>>>; +}; - template <class _Tp> - concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp>>; +template <class _Tp> +concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp>>; - template <class _Tp> - inline constexpr bool __is_std_initializer_list = false; +template <class _Tp> +inline constexpr bool __is_std_initializer_list = false; - template <class _Ep> - inline constexpr bool __is_std_initializer_list<initializer_list<_Ep>> = true; +template <class _Ep> +inline constexpr bool __is_std_initializer_list<initializer_list<_Ep>> = true; - template <class _Tp> - concept viewable_range = +template <class _Tp> +concept viewable_range = range<_Tp> && ((view<remove_cvref_t<_Tp>> && constructible_from<remove_cvref_t<_Tp>, _Tp>) || (!view<remove_cvref_t<_Tp>> && |