Express "Class argument may not be null" ?

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Aug 8 12:38:19 PDT 2017


On 8/8/17 2:56 PM, ag0aep6g wrote:
> On 08/08/2017 08:34 PM, Johan Engelen wrote:
>>    How would you express the function interface intent that a 
>> reference to a class may not be null?
>> For a function "void foo(Klass)", calling "foo(null)" is valid. How do 
>> I express that that is invalid? (let's leave erroring with a compile 
>> error aside for now)
>>
>> Something equivalent to C++'s pass by reference: "void foo(Klass&)".
[snip]
> 
> But you can pass null in a ref parameter:
> 
> ----
> void f(ref int x) @safe {}
> void main() @safe
> {
>      int* p = null;
>      f(*p);
> }
> ----

Note that C++ also can do this, so I'm not sure the & is accomplishing 
the correct goal:

void foo(Klass&);

int main()
{
    Klass *k = NULL;
    foo(*k);
}

However, the in contract does actually enforce the requirement.

-Steve


More information about the Digitalmars-d-learn mailing list