Skip to content

Commit a258537

Browse files
committed
Use an explicit return type for partition and related functions
1 parent 46794a7 commit a258537

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

source/containers/algorithms/partition.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import containers.array;
1515
import containers.begin_end;
1616
import containers.bidirectional_iterator;
1717
import containers.iterator;
18+
import containers.iterator_t;
1819
import containers.range;
1920
import containers.range_size_t;
2021
import containers.sentinel_for;
@@ -36,7 +37,7 @@ export constexpr auto is_partitioned = [](range auto && input, auto predicate) -
3637
return containers::find_if(it, last, predicate) == last;
3738
};
3839

39-
export constexpr auto partition_point = []<range Input>(Input && input, auto predicate) {
40+
export constexpr auto partition_point = []<range Input>(Input && input, auto predicate) -> iterator_t<Input> {
4041
auto count = bounded::integer<0, bounded::builtin_max_value<range_size_t<Input>>>(containers::size(input));
4142
auto first = containers::begin(input);
4243
if constexpr (numeric_traits::max_value<decltype(count)> == 0_bi) {
@@ -62,7 +63,7 @@ concept decrementable = requires(T value) { --value; };
6263

6364
struct partition_t {
6465
template<iterator ForwardIterator>
65-
static constexpr auto operator()(ForwardIterator first, sentinel_for<ForwardIterator> auto last, auto predicate) {
66+
static constexpr auto operator()(ForwardIterator first, sentinel_for<ForwardIterator> auto last, auto predicate) -> ForwardIterator {
6667
auto advance_first = [&]{
6768
first = containers::find_if_not(first, last, predicate);
6869
};
@@ -100,7 +101,8 @@ struct partition_t {
100101
}
101102
return first;
102103
}
103-
static constexpr auto operator()(range auto && input, auto predicate) {
104+
template<range Input>
105+
static constexpr auto operator()(Input && input, auto predicate) -> iterator_t<Input> {
104106
return operator()(containers::begin(input), containers::end(input), predicate);
105107
}
106108
};
@@ -111,7 +113,7 @@ export constexpr auto partition = partition_t();
111113
// returned.
112114
struct iterator_partition_t {
113115
template<bidirectional_iterator Iterator>
114-
constexpr auto operator()(Iterator first, Iterator middle, Iterator last, auto const compare) const {
116+
constexpr auto operator()(Iterator first, Iterator middle, Iterator last, auto const compare) const -> Iterator {
115117
BOUNDED_ASSERT(first == last or middle != last);
116118
auto predicate = [&](auto const & value) { return compare(value, *middle); };
117119
while (true) {

0 commit comments

Comments
 (0)