On 10/29/17 12:29 PM, Ola Fosheim Grøstad wrote:
On Sunday, 29 October 2017 at 15:57:19 UTC, Steven Schveighoffer wrote:
I would have expected Nullable!int to fit the bill, but unfortunately,
opCast(bool) doesn't work on a null Nullable.
But certainly you can construct a type that does work.
The right thing to do is to create a type that you cannot cast to bool,
but where you can test for invalid values and substitute in a default.
This is pretty simple, the if(x) provides a mechanism to check called
"casting to bool". That doesn't mean it will shoehorn bool into the
expression. In fact, the elvis operator provides a perfect way to type
the result with the "common type" rules of D.
The way to do it is to make a type that checks whether the expression is
valid or not, makes that into a bool, and then provides the real
expression to the result.
Forcing people to have a boolean interpretation of a type mean
valid/invalid state has viral consequences. It means that if the type
has a zero value then a boolean interpretation of zero now should give
true. That's not good for generic code.
It's actually perfect for generic code. If you need something other than
the current "0 means false" behavior (like for instance int), then you
wrap in a type that opCast!bool means what you want.
It should work just like a pointer.
In swift this is exactly what the ? operator does. I just wish Nullable
worked this way, I'm surprised it doesn't.
-Steve