
Roland Schwarz wrote:
Altough I am not terribly skilled in standards interpretation I think the following should be safe:
union { mem[]; foo s; };
Now I should be able to access this as mem[0], mem[1], ... from the writing side, e.g. from a function that fills my buffer, and later access it with s.a, s.b.
Absolutely not. The only circumstance in which you may access a member of a union that is not the one that has been most recently set is when you access common, structurally conformant members of structs, i.e. struct foo { int i; float f; }; struct bar { int one; float two; }; union foobar { foo f; bar b; }; foobar fb; fb.f.i = 0; fb.f.f = 1.1; cout << fb.b.one; // Yep, valid. The moment the types are not exactly equal (and two consecutive chars are not the same as a char[2]) you're no longer allowed to assume anything. Sebastian Redl