It seems the following std.range Stride members have the exact same comments as Retro. I guess it was a case of copy & paste, and its reflected in the online documentation: opIndex(size_t n); Forwards to input[input.length - n + 1]. Defined only if R is a random access range and if R defines R.length. void opIndexAssign(ElementType!(R) val, size_t n); Forwards to input[input.length - n + 1]. Defined only if R is a random access range and if R defines R.length. ElementType!(R) moveAt(size_t index); Forwards to input[input.length - n + 1]. Defined only if R is a random access range and if R defines R.length. typeof(this) opSlice(size_t a, size_t b); Forwards to input[input.length - n + 1]. Defined only if R is a random access range and if R defines R.length. --------------- These are all wrong. The first one should be: ''' opIndex(size_t n); Forwards to input[n * n]. Defined only if R is a random access range and if R defines R.length. ''' and the rest need to be updated based on the implementation. (I think all of these should be replaced with "input[n * n]")
Better not conflate the two "n"s :) opIndex(size_t i); Forwards to input[i * n]. (etc.)
Oh right, it's _n * n in the code. I think a better name for "_n" is 'step'.
Stride is gone and was replaced with an auto return function 'stride'. All of that documentation is gone now.