Looks like you are over-complicating things:

http://dpaste.dzfl.pl/eaca1408dc88

import std.range;

struct ColumnVectorForwardRange(T)
{
        private
        {
                T[] data;
                size_t cur = 0;
                size_t length = 0;
        }

        ColumnVectorForwardRange!T save() @property {
                return this;
        }

        bool empty() @property {
                return !length;
        }
        
        T front() @property {
                return data[cur];
        }
        
        void popFront() {
                ++cur;
                --length;
        }
}

static assert(isForwardRange!(ColumnVectorForwardRange!int));

void main() {}

Reply via email to