You should be able to work around this by using `for` loop instead of
`foreach`.
IMO that's a design bug in `foreach`:
https://issues.dlang.org/show_bug.cgi?id=15413

2016-09-14 14:39 GMT+02:00 Jerry via Digitalmars-d <
digitalmars-d@puremagic.com>:

> 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