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

Reply via email to