1717
1818#include " __config.hpp"
1919
20- #if !STDEXEC_NO_STDCPP_RANGES()
20+ #include < ranges >
2121
22- # include < ranges>
23-
24- # include " __prologue.hpp"
22+ #include " __prologue.hpp"
2523
2624namespace STDEXEC ::ranges
2725{
@@ -34,94 +32,4 @@ namespace STDEXEC::ranges
3432 using std::ranges::sentinel_t ;
3533} // namespace STDEXEC::ranges
3634
37- # include " __epilogue.hpp"
38-
39- #else
40-
41- # include < iterator>
42-
43- # include " __prologue.hpp"
44-
45- namespace STDEXEC ::ranges
46- {
47-
48- namespace __detail
49- {
50- constexpr void begin ();
51- constexpr void end ();
52-
53- template <class _Ty >
54- concept __has_member_begin = requires (_Ty&& __val) { static_cast <_Ty&&>(__val).begin (); };
55-
56- template <class _Ty >
57- concept __has_free_begin = __has_member_begin<_Ty>
58- || requires (_Ty&& __val) { begin ((static_cast <_Ty&&>(__val))); };
59-
60- template <class _Ty >
61- concept __has_member_end = requires (_Ty&& __val) { static_cast <_Ty&&>(__val).end (); };
62-
63- template <class _Ty >
64- concept __has_free_end = __has_member_end<_Ty>
65- || requires (_Ty&& __val) { end ((static_cast <_Ty&&>(__val))); };
66-
67- struct __begin_t
68- {
69- template <class _Range >
70- requires __has_member_begin<_Range>
71- auto
72- operator ()(_Range&& __rng) const noexcept (noexcept ((static_cast <_Range&&>(__rng)).begin()))
73- -> decltype((static_cast <_Range&&>(__rng)).begin())
74- {
75- return static_cast <_Range&&>(__rng).begin ();
76- }
77-
78- template <class _Range >
79- requires __has_free_begin<_Range>
80- auto
81- operator ()(_Range&& __rng) const noexcept (noexcept (begin((static_cast <_Range&&>(__rng)))))
82- -> decltype(begin((static_cast <_Range&&>(__rng))))
83- {
84- return begin ((static_cast <_Range&&>(__rng)));
85- }
86- };
87-
88- struct __end_t
89- {
90- template <class _Range >
91- requires __has_member_end<_Range>
92- auto operator ()(_Range&& __rng) const noexcept (noexcept ((static_cast <_Range&&>(__rng)).end()))
93- -> decltype((static_cast <_Range&&>(__rng)).end())
94- {
95- return static_cast <_Range&&>(__rng).end ();
96- }
97-
98- template <class _Range >
99- requires __has_free_end<_Range>
100- auto operator ()(_Range&& __rng) const noexcept (noexcept (end((static_cast <_Range&&>(__rng)))))
101- -> decltype(end((static_cast <_Range&&>(__rng))))
102- {
103- return end ((static_cast <_Range&&>(__rng)));
104- }
105- };
106- } // namespace __detail
107-
108- inline constexpr __detail::__begin_t begin{};
109- inline constexpr __detail::__end_t end{};
110-
111- template <class _Range >
112- using iterator_t = decltype (begin((__declval<_Range>())));
113-
114- template <class _Range >
115- using sentinel_t = decltype (end((__declval<_Range>())));
116-
117- template <class _Range >
118- using range_reference_t = decltype (*begin ((__declval<_Range>())));
119-
120- template <class _Range >
121- using range_value_t = std::iterator_traits<iterator_t <_Range>>::value_type;
122-
123- } // namespace STDEXEC::ranges
124-
125- # include " __epilogue.hpp"
126-
127- #endif
35+ #include " __epilogue.hpp"
0 commit comments