On Monday, 17 September 2012 at 00:22:52 UTC, Jonathan M Davis
wrote:
On Monday, September 17, 2012 00:43:50 deadalnix wrote:
It shouldn't be that hard to create a Nullable!T template.
We have one, and it would be wasteful to use that for
references or pointers
when they're naturally nullable (though you're more or less
forced to if you
want a truly nullable array thanks to the nonsense that empty
arrays and null
arrays are considered equal). You're forced to have a separate
boolean value
indicating whether it's null or not. That might make sense for
an int, since
it can't be null, but pointers and references _can_ be and are
in every type
system that I've ever used.
Regardless, the solution at this point is going to be to add
std.typecons.NonNullable. It would be in there already, but the
pull request
with it needed more work, and it hasn't been resubmitted yet.
- Jonathan M Davis
Instead of "NonNullable" a built-in operator would be preferable.
Because it seems as though many would like to have something.
Short example:
void foo(Foo& f) { }
void main() {
Foo& f1; // <-- error, not-null references declared, but not
assigned.
Foo f2; // <-- ok
foo(f1); // <-- we can trust, f1 has a valid value
foo(f2); /* we cannot trust, the compiler checks at runtime,
if f2 has a valid value.*/