Re: Default struct constructors if a struct member is a union

2024-07-06 Thread cc via Digitalmars-d-learn
On Saturday, 29 June 2024 at 23:33:41 UTC, solidstate1991 wrote: My question is can I initialize structs like these in one line without relying on a second line? ```d template ValueOfUDAType(alias T, alias UDA) { static foreach (uidx, U; __traits(getAttributes, T)) static if (is(typeof(U) ==

Re: Default struct constructors if a struct member is a union

2024-07-02 Thread Steven Schveighoffer via Digitalmars-d-learn
On Saturday, 29 June 2024 at 23:33:41 UTC, solidstate1991 wrote: My usecase scenario doesn't really allow constructors for the struct, since it's a binding to an external library via C API. BTW, this is not true. A constructor does not change the struct layout or anything about it from the C

Re: Default struct constructors if a struct member is a union

2024-07-02 Thread Steven Schveighoffer via Digitalmars-d-learn
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: cann

Re: Default struct constructors if a struct member is a union

2024-06-30 Thread Basile B. via Digitalmars-d-learn
On Sunday, 30 June 2024 at 11:23:45 UTC, Nick Treleaven wrote: On Saturday, 29 June 2024 at 23:33:41 UTC, solidstate1991 wrote: S foo0 = S(TypeEnum.Integer32, S(20)); //Ugly, but works S foo1 = S(TypeEnum.Integer64, S(20L)); //Error: cannot Did you mean `U(20)`? The 20 applies to the first fi

Re: Default struct constructors if a struct member is a union

2024-06-30 Thread Nick Treleaven via Digitalmars-d-learn
On Saturday, 29 June 2024 at 23:33:41 UTC, solidstate1991 wrote: S foo0 = S(TypeEnum.Integer32, S(20)); //Ugly, but works S foo1 = S(TypeEnum.Integer64, S(20L)); //Error: cannot Did you mean `U(20)`? The 20 applies to the first field of the union, i32. `U(20L)` also works and (I think) it doe

Re: Default struct constructors if a struct member is a union

2024-06-29 Thread Basile B. via Digitalmars-d-learn
On Saturday, 29 June 2024 at 23:33:41 UTC, solidstate1991 wrote: [...] 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.

Default struct constructors if a struct member is a union

2024-06-29 Thread solidstate1991 via Digitalmars-d-learn
```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 mem