@@ -24,28 +24,28 @@ struct integer_iterator {
24
24
using pointer = I*;
25
25
using reference = I&;
26
26
27
- explicit integer_iterator (I value) : value(value) {}
27
+ explicit constexpr integer_iterator (I value) : value(value) {}
28
28
29
- I operator *() const {
29
+ constexpr I operator *() const {
30
30
return value;
31
31
}
32
32
33
- I const * operator ->() const {
33
+ constexpr I const * operator ->() const {
34
34
return &value;
35
35
}
36
36
37
- integer_iterator& operator ++() {
37
+ constexpr integer_iterator& operator ++() {
38
38
++value;
39
39
return *this ;
40
40
}
41
41
42
- integer_iterator operator ++(int ) {
42
+ constexpr integer_iterator operator ++(int ) {
43
43
const auto copy = *this ;
44
44
++*this ;
45
45
return copy;
46
46
}
47
47
48
- bool operator ==(const integer_iterator& other) const {
48
+ constexpr bool operator ==(const integer_iterator& other) const {
49
49
if constexpr (one_sided) {
50
50
// Range-for loops' end test is `begin != end`, not `begin <
51
51
// end`. To handle `c10::irange(n)` where n < 0 (which should be
@@ -64,7 +64,7 @@ struct integer_iterator {
64
64
return false ; // Horrible hack
65
65
}
66
66
67
- bool operator !=(const integer_iterator& other) const {
67
+ constexpr bool operator !=(const integer_iterator& other) const {
68
68
return !(*this == other);
69
69
}
70
70
@@ -80,12 +80,12 @@ template <
80
80
std::enable_if_t <std::is_integral_v<I>, bool > = true >
81
81
struct integer_range {
82
82
public:
83
- integer_range (I begin, I end) : begin_(begin), end_(end) {}
83
+ constexpr integer_range (I begin, I end) : begin_(begin), end_(end) {}
84
84
using iterator = detail::integer_iterator<I, one_sided>;
85
- iterator begin () const {
85
+ constexpr iterator begin () const {
86
86
return begin_;
87
87
}
88
- iterator end () const {
88
+ constexpr iterator end () const {
89
89
return end_;
90
90
}
91
91
@@ -116,7 +116,7 @@ integer_range<Integer2> irange(Integer1 begin, Integer2 end) {
116
116
template <
117
117
typename Integer,
118
118
std::enable_if_t <std::is_integral_v<Integer>, bool > = true >
119
- integer_range<Integer, true > irange (Integer end) {
119
+ constexpr integer_range<Integer, true > irange (Integer end) {
120
120
return {Integer (), end};
121
121
}
122
122
0 commit comments