On Monday, 27 May 2013 at 07:45:41 UTC, Jonathan M Davis wrote:
I don't see why. NotNull would statically prevent assigning
null to it (which
is easy to do, since null has its own type) and will assert
that any
references assigned to it are null. You then have the guarantee
that NotNull!T
is never null. What would a built-in type do that that doesn't?
The one point
where null could get in - when constructed from a nullable
reference - would
have to be checked with a built-in type as well. The only way
to prevent it is
to make it illegal to assign a nullable reference to a
non-nullable one and
make it so that construction has to occur within the the
non-nullable
reference - e.g. NotNull!T(args).
That is not enough. NotNull must be initialized, so the compiler
have to track initialization in way it don't do today. This is
the exact same processing required to ensure non null references.