On 15/07/17 20:52, laza...@kluug.net wrote:
On one hand, you try to be very fundamental about enums - you say that only declared enum values are valid. And there is no zero value for TMyEnum. TMyEnum is declared as follows:

TMyEnum = (one = 1, two);

TMyEnum is not a number so it cannot be initialized to zero.

I have said from the start that it is possible to store invalid values in variables through the use of a.o. pointers (which is what the class zeroing does), explicit typecasts and assembly.

On the other hand you say, it is documented to be declared to zero.

I say that the memory occupied by class instance fields is documented to be initialsed with the bit pattern for zero. If the bit pattern zero is not a value for a particular type, using a variable of that type while it contains that bit pattern is undefined. Just like using a local variable without first assigning a valid value to it is undefined

So you say that an enumeration is an integer value with aliases for number values.

Not anymore than I say that a shortstring is a 2048 bit integer with aliases for integer values. It's true that eventually everything is expressed in bits. That is, however, completely besides the point when it comes to the semantics of a type system.


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to