## digitalmars.D.learn - Append const to array

Yuxuan Shui <yshuiv7 gmail.com> writes:
```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?
```
Sep 20 2016
Jonathan M Davis via Digitalmars-d-learn writes:
```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
```
Sep 20 2016
Yuxuan Shui <yshuiv7 gmail.com> writes:
```On Tuesday, 20 September 2016 at 22:38:33 UTC, Jonathan M Davis
wrote:
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

That makes sense, thanks.
```
Sep 20 2016