On Thursday, 30 November 2017 at 18:10:01 UTC, Jonathan M Davis wrote:
whereas it would have squeaked by in a smaller object, but it's really a bug to be calling a member function on a null object anyway.

Well, it is a bug, but the member-function may have been written with an invariant in mind, so it would then go undetected on a small object and continue running with broken invariants (state outside the object).

So without such a check there would be reduced value in builds with contracts. E.g. there could be a global involved that now has a broken invariant. Maybe contracts aren't really a major feature anyway, but such gotchas should be listed in the spec at least.

doing that for you and segfaulting. It's just the overly large objects where that's not going to work, and we can add null checks then

I think the objection is that small objects with non-virtual member-functions and a path that does not dereference the this-pointer will pass incorrectly if this is null.

Assume you  add a non-nullable pointer type.

Then you probably would want to assume that the this pointer is never null so that you don't have to test it manually before assigning it to a non-nullable pointer variable. Or you risk getting null into non-nullable pointers…

But it really depends on how strong you want the type system to be.

Reply via email to