File tree Expand file tree Collapse file tree 1 file changed +26
-4
lines changed
source/containers/algorithms Expand file tree Collapse file tree 1 file changed +26
-4
lines changed Original file line number Diff line number Diff line change @@ -71,12 +71,34 @@ struct reverse_traits {
7171 }
7272};
7373
74- export constexpr auto reverse_iterator (bidirectional_iterator auto it) {
75- return adapt_iterator (it, value_wrapper<reverse_traits>());
74+ template <typename >
75+ constexpr auto is_reverse_iterator = false ;
76+
77+ template <typename Iterator>
78+ constexpr auto is_reverse_iterator<adapt_iterator<Iterator, value_wrapper<reverse_traits>>> = true ;
79+
80+ export template <bidirectional_iterator Iterator>
81+ constexpr auto reverse_iterator (Iterator it) {
82+ if constexpr (is_reverse_iterator<Iterator>) {
83+ return it.base ();
84+ } else {
85+ return adapt_iterator (it, value_wrapper<reverse_traits>());
86+ }
7687}
7788
78- export constexpr auto reversed (range auto && source) {
79- return adapt (OPERATORS_FORWARD (source), reverse_traits ());
89+ template <typename >
90+ constexpr auto is_reversed = false ;
91+
92+ template <typename Range>
93+ constexpr auto is_reversed<adapt<Range, reverse_traits>> = true ;
94+
95+ export template <range Range>
96+ constexpr auto reversed (Range && source) {
97+ if constexpr (is_reversed<Range>) {
98+ return OPERATORS_FORWARD (source).base ();
99+ } else {
100+ return adapt (OPERATORS_FORWARD (source), reverse_traits ());
101+ }
80102}
81103
82104} // namespace containers
You can’t perform that action at this time.
0 commit comments