docs/definition: !object

Steven Schveighoffer schveiguy at yahoo.com
Thu Mar 8 10:31:48 UTC 2018


On 3/8/18 1:00 AM, Nick Sabalausky (Abscissa) wrote:
> On 03/08/2018 12:05 AM, ketmar wrote:
>> Nick Sabalausky (Abscissa) wrote:
>>
>>> I'm having trouble finding the documentation for what exactly the 
>>> unary "not" operator does when applied to a class/interface object. 
>>> Does this documentation exist somewhere?
>>>
>>> I know at least part of it involves "is null", but I seem to remember 
>>> hearing there was more to it than just that.
>>
>> https://dlang.org/spec/operatoroverloading.html#boolean_operators
>>
>> "Class references are converted to bool by checking to see if the 
>> class reference is null or not."
> 
> Ah, thanks.
> 
> But are we CERTAIN that's all there is to it? I have a non-reduced 
> situation right now where outputting the address of a class reveals a 
> non-null address, and yet assert(!!theObjectInQuestion) is failing. 
> (this is occurring during stack unwinding, if that makes a difference)

One thing to keep in mind, assert(someObject) does more than just check 
if it's not null, it also runs the object's invariant to see if it's valid.

I'm not sure about assert(!!someObject), probably this is just checking 
for non-null, but I'm not sure if the compiler folds this into 
assert(someObject) (which would be a bug, but may explain things). To be 
more pedantic, I'd recommend assert(someObject !is null)

-Steve


More information about the Digitalmars-d-learn mailing list