On 06.01.2016 23:04, Jack Applegame wrote:
import std.algorithm;

struct Bar {
     const int a;
     int b;
}

void main() {
     Bar[1] arr;
     Bar bar = Bar(1, 2);
     bar[0].b = 4;

Assuming you meant `arr[0].b = 4;`. Just overwriting the mutable part of bar[0] is ok, of course.

     move(bar, arr[0]);       // ok

I consider it a bug that this compiles. You're overwriting immutable data, which shouldn't be possible (without casting). https://issues.dlang.org/show_bug.cgi?id=15315

     arr[1] = bar;            // fail, why?

Assuming you meant `arr[0] = bar;`.

The error message isn't too bad here: "Error: cannot modify struct arr[0] Bar with immutable members". You're trying to overwrite immutable data, that's not allowed.

     move(Bar(1, 2), arr[0]); // fail, why source parameter isn't auto ref?

I'm not sure about the details. Maybe it would make sense for `move` to accept rvalues, maybe not. Breaking immutable is certainly not a good reason to do it, though.

}

Reply via email to