Re: Anonymous union rules against constructors & assignment
"Crosbie Fitch" wrote:
<johnchx2@yahoo.com> wrote in message
news:1149552168.378163.198510@h76g2000cwa.googlegroups.com...
I see...I hadn't realized that you were proposing a wholesale rewrite
of the semantics of unions. Basically, the proposal seems to boil down
to "treat all members of unions as if they were POD whether they are
POD or not."
Not at all.
Treat all members of unions like members of any other class, recognised
precisely for what they are.
Apart from overlaid storage there should be no difference between:
struct S { A a; B b; } s; s.b=B(123);
and
union U { A a; B b; } u; new(&u.b) B(); u.b=B(123);
So a default constructor would be mandatory?
and no restrictions on the members of A or B,
EXCEPT that:
The members of U are not initialised, copied or destroyed by default (unless
the language provides a way to override that default). The union is
considered independently from its members, so the union is copied bitwise by
default (potentially overriden come the glorious day when unions are
upgraded to class status).
You say that you're not assuming that the members are PODs. That means
(among other things) that they won't necessarily survive a bit-wise
copy. Despite this fact, the union itself is to be copied bitwise.
Could you explain in a little more detail precisely how that's supposed
to work?
Remember, I'm not asking for the language to be extended. I'm asking for the
hobbles to be removed, i.e. the unnecessary restrictions on union members.
unions are copied by memcpy anyway. To imagine that actually, each member's
assignment-copy operator is called is a delusion invented in the name of
semantic purity by those who could conceive of little use for a union in C++
and regarded it as a dangerous anachronism to be deprecated.
I'm curious - who expressed that delusion? That sounds like a
description of the implicitly-defined copy assignment operator for
class types, but it doesn't describe unions.
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]