I got a range which disables copy construction and I want to loop the range within another loop using the same range. So I thought I can mark the struct range with @disable this(this) and then use refRange to initialize the loop.

So with something like this:

void main()
{       
        auto valueRange = FooRange("123");
        foreach(ch; refRange(&valueRange))
                writeln(ch);
}


struct FooRange {
        @disable this();
        @disable this(this);
        this(string str) {
                this.str = str;
        }
        
        @property bool empty() { return str.empty; }
        @property dchar front() { return str.front; }
        void popFront() { str.popFront; }
        
private:
        string str;
}


But I get compile time errors messages saying:
std/range/package.d(8155,23): Error: struct app.FooRange is not copyable because it is annotated with @disable

It feels strange that refRange ever want to copy.
Bug or feature?

Reply via email to