Holes in structs and opEquals
Walter Bright
newshound1 at digitalmars.com
Sun Mar 7 13:03:18 PST 2010
Fawzi Mohamed wrote:
> one could argue that the unsafe operation is memset.
That's right.
> The compiler always initializes a struct, so that what you describe
> should never happen in a safe program.
Right.
> Still as you say the following example that might indeed considered a bug:
>
> S s1=void,s2=void;
> s1.s=0; s1.d=0;
> s2.s=0; s2.d=0;
> assert(s1 == s2);
>
> here the assert might fail depending on the previous content of the memory.
> I am not sure of what is the best solution, I am not sure that defining
> a special comparison operation by default for each struct is the correct
> solution (it can be quite some bloat), please note that a user defined
> comparison function will not have these problems.
No, it's not a bug in the language, it's a bug in the user code. Using
=void is an advanced feature, and it requires the user to know what he's
doing with it. That's why it isn't allowed in safe mode.
> Still I agree that traking down a bug due to this might be very ugly...
The idea with =void initializations is that they are findable using
grep, and so can be singled out for special attention when there is a
problem.
More information about the Digitalmars-d
mailing list