|
Boost : |
Subject: Re: [boost] [atomic] Structs with default constructor
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2014-07-07 09:27:55
On Monday 07 July 2014 14:23:13 Tim Blechmann wrote:
> >> Boost.Atomic 1.55 accepted structs with a user-defined default
> >> constructor
> >> as template argument, the version from the 1.56 test build doesn't
> >> (because
> >> of the union_cast). Is this by design? I could be wrong, but I thought
> >> the
> >> only requirement for structs to use them in atomics was that they were
> >> trivially coyable.
> >
> > Yes, this is the property of the current implementation. The type has to
> > be
> > trivial (3.9/9). The previous versions compiled with types with
> > non-trivial
> > default constructors but the constructors were not actually called.
>
> andrey, the standard requires that the type is trivially copyable, but
> it allows non-trivial constructors. this should be fixed for the 1.56
> release, especially as it breaks existing code (including boost.lockfree).
Yes, I know the standard requires the type to be trivially copyable. My point
is that the code did not support this previously and silently misbehaved, and
now it explicitly fails to compile. The code was broken long before 1.56.
Implementing support for non-trivial default constructors is possible but
tricky - mostly because we have to explicitly call the default constructor on
the storage, and while doing this we have to deal with alignment issues. Also
I don't know if we should also explicitly call the destructor. I'm willing to
resolve this at some point, just not sure that 1.56 is the deadline I'm able
to target.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk