On Monday, 5 June 2017 at 23:17:46 UTC, Ali Çehreli wrote:
auto a = [ 1, 2, 3, 4 ];
auto b = a;
Both of those slices have non-zero capacity yet one of them
will be the lucky one to grab it. Such semantic issues make me
unhappy. :-/
Ali
You have to remember that slices don't own their memory. So while
capacity show a guaranteed reserved memory, it is reserved for
the dynamic array the slice has a window into.
Remove probably shouldn't try to reclaim capacity, while it is
destructive for any other slice, it shouldn't make string
appending also destructive.
untested:
auto a = [ 1, 2, 3, 4 ];
auto b = a[$-1, $];
a.remove(2);
assert(b == [4]);
a ~= 6;
assert(b == [4]);