Hi, here is small code snippet to demonstrate my problrm: #include <stddef.h> #include <iostream> #include <boost/iterator/iterator_adaptor.hpp> template<typename T, size_t stride> class stride_iterator : public boost::iterator_adaptor<stride_iterator<T, stride>, T*> { public: stride_iterator() : stride_iterator::iterator_adaptor_( 0 ) { } explicit stride_iterator( T * p ) : stride_iterator::iterator_adaptor_( p ) { } private: friend class boost::iterator_core_access; void increment() { this->base_reference() = this->base() + stride; } void deccrement() { this->base_reference() = this->base() - stride; } void advance( ptrdiff_t d ) { this->base_reference() = this->base() + d*stride; } ptrdiff_t distance_to( stride_iterator const & i ) const { return ( i.base() - this->base() )/stride; } }; int main() { int arr[12] = {}; arr[3*2] = 33; arr[5*2] = 55; stride_iterator<int, 2> it( arr ); it[2] = -22; it[3] = it[5]; std::cout << arr[2*2] << ' ' << arr[3*2] << ' ' << arr[5*2] << '\n'; return 0; } It prints "-22 33 55" instead of "-22 55 55" (which I expected) - so "it[3] = it[5];" assignment didn't modifies array. Is it intended behaviour? Or maybe I'm doing something wrong?