Re: About Immutable struct members and arrays.

2016-01-07 Thread Jack Applegame via Digitalmars-d-learn

On Thursday, 7 January 2016 at 00:19:12 UTC, anonymous wrote:

On 06.01.2016 23:04, Jack Applegame wrote:


 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


I think it isn't a bug. I'm not overwriting immutable data, I'm 
replacing old data with a new constructed one. I want to destruct 
old data and fill uninitialized raw memory with a new constructed 
one.


Re: About Immutable struct members and arrays.

2016-01-06 Thread anonymous via Digitalmars-d-learn

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.



}


About Immutable struct members and arrays.

2016-01-06 Thread Jack Applegame via Digitalmars-d-learn

import std.algorithm;

struct Bar {
const int a;
int b;
}

void main() {
Bar[1] arr;
Bar bar = Bar(1, 2);
bar[0].b = 4;
move(bar, arr[0]);   // ok
arr[1] = bar;// fail, why?
move(Bar(1, 2), arr[0]); // fail, why source parameter isn't 
auto ref?

}