- SimdIterator& operator-=(difference_type d)
- {
- p_ -= simdWidth * d;
- return *this;
- }
- SimdIterator operator+(difference_type d) { return SimdIterator(p_ + simdWidth * d); }
- SimdIterator operator-(difference_type d) { return SimdIterator(p_ - simdWidth * d); }
-
- difference_type operator-(SimdIterator o) { return (p_ - o.p_) / simdWidth; }
-
- bool operator==(SimdIterator other) const { return p_ == other.p_; }
- bool operator!=(SimdIterator other) const { return p_ != other.p_; }
- bool operator<(SimdIterator other) const { return p_ < other.p_; }
- bool operator>(SimdIterator other) const { return p_ > other.p_; }
- bool operator<=(SimdIterator other) const { return p_ <= other.p_; }
- bool operator>=(SimdIterator other) const { return p_ >= other.p_; }
-
- reference operator*() const { return reference(p_); }
+ typename Base::difference_type operator-(SimdIterator o) { return (p_ - o.p_) / simdWidth; }
+ typename Base::reference operator*() const { return typename Base::reference(p_); }