Holes in structs and opEquals
Walter Bright
newshound1 at digitalmars.com
Mon Mar 8 03:27:15 PST 2010
yigal chripun wrote:
> The compiler knows at compile-time what variables are initialized with "=void". The compiler than can add a compilation error when such a struct variable is used in an equals expression.
> this doesn't cover use of malloc() which must be the user's responsebility.
>
> e.g.
> S s1=void,s2=void;
> s1.s=0; s1.d=0;
> s2.s=0; s2.d=0;
> assert(s1 == s2); // <- this line should not compile
>
It can, but I don't agree that it should. For an =void initialization,
it's the user's responsibility to initialize it properly. The use of
=void implies the user knows what he's doing with it, and will take care
to initialize the 'holes' as necessary.
Trying to disable == for such structs is a losing battle, anyway, as the
compiler could only detect the most obvious cases. Pass a reference to
it to a function, store it in a data structure, etc., and all that goes
away.
More information about the Digitalmars-d
mailing list