[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