www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Error: cannot modify struct arr[0] MyStruct with immutable members

reply "ref2401" <refactor24 gmail.com> writes:
struct MyStruct {
	this(int a, int b) {
		this.a = a;
		this.b = b;
	}

	immutable int a;
	immutable int b;
}

void main(string[] args) {
	MyStruct[] arr = new MyStruct[3];

	arr[0] = MyStruct(5, 7);
}	

Why does it happen?
May 11 2015
parent reply "Adam D. Ruppe" <destructionator gmail.com> writes:
On Monday, 11 May 2015 at 13:37:27 UTC, ref2401 wrote:
 Why does it happen?
You'd just be writing to the immutable memory through a different name. Consider if someone took a reference to one of those immutable ints, expecting it to never change. Then you wrote a new struct over the same location with different values. Then the ints pointed to by that reference suddenly change, despite allegedly being immutable! Assigning a struct in-place is the same as assigning all its members.
May 11 2015
parent "ref2401" <refactor24 gmail.com> writes:
On Monday, 11 May 2015 at 13:44:14 UTC, Adam D. Ruppe wrote:
 On Monday, 11 May 2015 at 13:37:27 UTC, ref2401 wrote:
 Why does it happen?
You'd just be writing to the immutable memory through a different name. Consider if someone took a reference to one of those immutable ints, expecting it to never change. Then you wrote a new struct over the same location with different values. Then the ints pointed to by that reference suddenly change, despite allegedly being immutable! Assigning a struct in-place is the same as assigning all its members.
Got it. Thank you.
May 11 2015