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 {
71
71
}
72
72
};
73
73
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
+ }
76
87
}
77
88
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
+ }
80
102
}
81
103
82
104
} // namespace containers
You can’t perform that action at this time.
0 commit comments