On Thursday, 31 January 2013 at 19:55:01 UTC, Robert burner
Schadek wrote:
Just use a payload struct and check whether that is null before
every operation.
The following problem is inherent to this approach:
---
struct Array(T) {
static struct Payload {
T* data;
size_t length;
}
Payload* p;
// ...
}
void fill(T)(Array!T a) {
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;
}
void client() {
Array!int a;
fill(a);
// Oops, a is still empty (with null payload).
}
---
Such containers are "almost, but not quite" reference types;
reason enough to @disable this() in order to improve the user
experience, in my opinion.
David