char * get_dangling_ptr() { char[] a; a.reserve(15);
a ~= 'x'; char *x = &a[0]; auto a_initial_ptr = a.ptr; foreach (_; 0 .. 30) { a ~= 'y'; //a.assumeSafeAppend() ~= 'y'; } assert(a.ptr != a_initial_ptr, "a should've reallocated"); // trying to reuse 'a's old memory foreach (_; 0 .. 10) { char[] b; b.reserve(15); foreach (__; 0 .. 15) { b ~= 'y'; } } return x; } void main() { import std.stdio : writefln; char *x = get_dangling_ptr(); writefln("ptr: %X; value: %s", x, *x); } x doesn't seem to be a dangling pointer, how come?