Initialization of unions

Justin Johansson no at spam.com
Thu Sep 23 05:28:20 PDT 2010


On 23/09/2010 10:14 PM, bearophile wrote:
> Justin Johansson:
>
>> One of the problems with C++ is that it is not possible
>> to create unions with non-primitive members (e.g. structs)
>> that have constructors.
>
> Do you mean something like this?
>
> struct S1 {
>      int y;
>      this(int x) { y = x; }
> }
>
> struct S2 {
>      string t;
>      this(string s) { t = s; }
> }
>
> union U {
>      S1 s1;
>      S2 s2;
> }
>
> static U u2 = { s2:S2("hello") };
>
> void main() {
>      U u = U(S1(10));
>      assert(u.s1.y == 10);
>      u.s2 = S2("hello");
>      assert(u.s2.t == "hello");
>      // U u3 = U(S2("hello")); // not possible
> }

Yes, but not yes; something like that.  You are obviously
one step ahead of me so perhaps I should give up or else
post the exact problem in C++.  Still, it looks likes
from what you have shown that D has some better union
construction syntax than C++.

I hope others can throw in their 2 cents.

Bye,
Justin



More information about the Digitalmars-d mailing list