Discussion Thread: DIP 1035-- at system Variables--Final Review

Paul Backus snarwin at gmail.com
Fri Mar 4 13:09:42 UTC 2022


This is my reply to [this post][1] from the feedback thread:

[1]: 
https://forum.dlang.org/post/qbbatlviwhjsnytbypfw@forum.dlang.org

On Friday, 4 March 2022 at 09:39:53 UTC, Dennis wrote:
> On Friday, 25 February 2022 at 21:46:25 UTC, Dukc wrote:
>> Wouldn't putting the handle in union with `void[1]` work?
>
> No, `void[1]` is not a type with unsafe values.

`void[1]` is considered by the compiler to potentially contain 
pointer data, in accordance with this section of the language 
spec:

https://dlang.org/spec/arrays.html#void_arrays

Note in particular the paragraph that begins, "Void arrays can 
also be static".

As a result, the compiler will not allow you to void-initialize a 
`void[1]` in `@safe` code:

```d
void main() @safe {
     void[1] a = void; // error
}
```

So, the workaround suggested by Dukc would indeed work.

(By the way, I know this because the first thing I did after I 
read his post in the feedback thread was to actually write out a 
complete example using the `void[1]` workaround and check to see 
if it worked.)


More information about the Digitalmars-d mailing list