Are null refs intentionally allowed?

Tejas notrealemail at gmail.com
Sat Jul 16 12:40:06 UTC 2022


On Saturday, 16 July 2022 at 12:33:57 UTC, Dukc wrote:
> This compiles and runs just fine, printing what you'd except:
>
> ```D
> @safe void main()
> {
>     import std.stdio;
>
>     int* p;
>     isNull(*p).writeln;
>     p = new int(5);
>     isNull(*p).writeln;
> }
>
> @safe bool isNull(ref int x){return &x is null;}
> ```
>
> The question is, is this intentional? I'm writing "DIP1000: 
> Memory Safety in a Modern System Programming Language Pt. 2" 
> and currently I've written that this is allowed, even when it's 
> not in C++.
>
> But there are still two possibilities: either this is okay by 
> design, or works by accident but really disallowed. Which is 
> the case?

It doens't compile when I run it on run.dlang.io, erroring out 
with:
```
onlineapp.d(11): Error: cannot take address of parameter `x` in 
`@safe` function `isNull`
```


More information about the Digitalmars-d mailing list