[fpc-devel] Question about "Default()"

Michael Van Canneyt michael at freepascal.org
Thu Feb 22 14:39:09 CET 2024



On Thu, 22 Feb 2024, Martin Frb via fpc-devel wrote:

> https://www.freepascal.org/docs-html/rtl/system/default.html
>> Default is a compiler intrinsic: it returns for every type T a default 
>> value. In essence, this is a block of memory that is zeroed out. It can be 
>> used to correctly initialize any type, and more importantly, a managed 
>> type. It also works using a generic type template. 
>
> But zero isn't always a valid value => so how can it be used to initialize a 
> type where that is invalid.
>
> The below will runtime error "invalid enum value".
> (And also, in the past, I saw it pointed out countless times, that setting an 
> enum to an ordinal value that is not matching any of its members does not 
> have a defined behaviour).
>
> So is that a bug in Default?
> Or is the documentation wrong "any type"? (it contradicts itself anyway 
> "zeroed" <> "any type")

I have amended the documentation to say that a block of zeroes is not
necessarily a correct value, and have given 3 examples of types where it can
go wrong.

Michael.




More information about the fpc-devel mailing list