On Tuesday, 3 September 2013 at 03:08:34 UTC, Vladimir Panteleev wrote:
On Tuesday, 3 September 2013 at 02:31:44 UTC, Lionello Lunesu wrote:
On 9/3/13 8:34, Vladimir Panteleev wrote:
On Tuesday, 3 September 2013 at 00:05:04 UTC, Walter Bright wrote:
On 9/2/2013 4:57 PM, Dylan Knutson wrote:
Can someone shed some light on this?

It comes from C. This was done in C so that addresses of struct
instances will always be unique.

Why is that important, and why does D need it?

In C, this might make some sense, however empty structs are much more
useful in D, e.g. for metaprogramming.

struct Z {};
Z a, b;
assert(&a != &b);

Yes, but why is this important? If you declare Z as "alias int[0] Z", the assert passes, so why is this property needed for structs but not static arrays?

alias int[0] Y;
Y.sizeof == 0 // Bug?
Y a;
a.length == 0; // Correct.

This is a bug IMO because the size of Y is 1 byte, not 0.

struct Z{}
Z.sizeof = 1;
Z a,b;

If I see code like this I expect a & b to have different addresses. But then I'm heavily influenced by C/C++. I'd prefer a different syntax, say:

union struct Z{}
or
immutable struct Z{}

either of these reflect that all instances will share the same memory location.

G.

Reply via email to