Express "Class argument may not be null" ?
Andre Kostur via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Aug 8 13:00:16 PDT 2017
On 2017-08-08 12:38 PM, Steven Schveighoffer wrote:
> 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.
To be fair: it cannot be done in C++ without first invoking Undefined
Behaviour (such as dereferencing a nullptr).
More information about the Digitalmars-d-learn
mailing list