need help to work around float union non-zero init

Nick Treleaven nick at geany.org
Fri Sep 20 16:21:10 UTC 2024


On Friday, 20 September 2024 at 09:38:54 UTC, Dakota wrote:
> I need my struct defined as `isZeroInit`,  so can I can import 
> them as `di` file.  (this also reduce build size)
>
>
> But I find this problem with float inside union:
>
>
> ```d
> struct test_t {
>     union {
>         int i32;
>         float f32;
>     }
> }
>
> static assert(__traits(isZeroInit, test_t) );
> ```
>
> ```sh
> Error: static assert:  `__traits(isZeroInit, test_t)` is false
> ```
>
> I consider this is compiler bug

Fix: https://github.com/dlang/dmd/pull/16858

> (it may take years to get fixed), so I am here to ask any way 
> to workaround this problem?

Write `= void` for each field with non-zero init:

```
     union {
         int i32;
         float f32 = void;
     }
```
Thanks to Dennis for the workaround.


More information about the Digitalmars-d-learn mailing list