On Tuesday, September 20, 2016 22:23:08 Yuxuan Shui via Digitalmars-d-learn wrote: > struct A { > ulong[] x; > } > struct B { > ulong x; > } > void main() { > B[] b; > const(B) xx = B(1); > b ~= xx; // Works > > A[] c; > const(A) yy = A([1]); > c ~= yy; // Does not > } > > What gives?
const(A) means that the ulong[] inside is const(ulong[]). When yy is copied to be appended to c, it goes from const(A) to A, which means that const(ulong[]) would need to be sliced and and set to ulong[], which would violate const, because it would mean that the last element in c could mutate then elements of its x, which would then mutate the elements in yy. - Jonathan M Davis