Default struct constructors if a struct member is a union

Steven Schveighoffer schveiguy at gmail.com
Tue Jul 2 15:52:03 UTC 2024


On Saturday, 29 June 2024 at 23:33:41 UTC, solidstate1991 wrote:
> ```d
> union U {
>     int i32;
>     long i64;
>     float f32;
>     double f64;
> }
>
> struct S {
>     TypeEnum type;
>     U data;
> }
>
> S foo0 = S(TypeEnum.Integer32, S(20));  //Ugly, but works
> S foo1 = S(TypeEnum.Integer64, S(20L)); //Error: cannot 
> implicitly convert expression
> //ditto for the rest of the members
> ```
>
> My question is can I initialize structs like these in one line 
> without relying on a second line? My usecase scenario doesn't 
> really allow constructors for the struct, since it's a binding 
> to an external library via C API.

Have you tried named parameter construction?

```d
S foo2 = S(TypeEnum.Float32, U(f32: 20.0));
```

-Steve



More information about the Digitalmars-d-learn mailing list