On Tuesday, 2 June 2015 at 00:11:09 UTC, Andrei Alexandrescu
wrote:
On 6/1/15 3:43 PM, deadalnix wrote:
On Monday, 1 June 2015 at 19:43:33 UTC, Andrei Alexandrescu
wrote:
Do not define constructors. They ostensibly imply commitment
to
remembering to call the appropriate destructor. A union can
only be
default constructed (with its init value as described) and
has no
destructor.
This is implied in C++ because of manual memory management. I
don't
think it is in D.
It is because destructors exist in both languages.
It is common in D to have a struct with a constructor and no
destructor.
5/ union currently disallow members with postblit and/or
destructor . It
seems that this was needed in C++ as per Andrei's comments.
It seems to
me that, because of manual memory management, C++ would have
a lot more
struct with copy constructor and/or destructor than in D, so
I'm not
sure if this require change in spec. Andrei, can you give
more details
on the C++ situation here ?
That rule has hurt C++ everywhere, and the community credits
Lois
Goldthwaite for pushing the current rule, which allows types
with
cdtors in unions. Let's go the same way, unions are all but
useless
otherwise.
Without knowing the rationale in C++, it is difficult to
assert that
this is also valid in D. You seems to be knowledgeable of the
subject,
so surely you can enlight us on that one.
I intentionally gave enough information to allow easy further
research. http://goo.gl/19Nol5 lists N2412 and N2248 as top
hits, their motivation sections are relevant.
The abstract of the 2 above mentioned link only discuss the
*constructor* case. It was never question of struct with
constructor not being able to be in union.
You attitude is only weakening your point.