
Boost : 
Subject: Re: [boost] storing intrusive_ptr in atomic?!
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 20131025 06:28:55
On Friday 25 October 2013 10:25:16 Giovanni Piero Deretta wrote:
> On Fri, Oct 25, 2013 at 10:22 AM, Oliver Kowalke
>
> <oliver.kowalke_at_[hidden]>wrote:
> > 2013/10/25 Giovanni Piero Deretta <gpderetta_at_[hidden]>
> >
> > > Intrusive_ptr doesn't have tivial copy constructor (how could it have?
> > > it
> > > needs to update the counter), ergo is not trivially copyable and the
> >
> > above
> >
> > > two point do not apply.
> >
> > but the standard says 'trivially copyable' not 'trivial copy constructor'
> > 
> > e.g.
> > the code examples by the standard document gives correct results for
> > intrusive_ptr (because all criteria
> > are fulfilled).
> > does this mean the standard document contains a false wording/examples?
>
> I do not have the standard at hand, but a trivially copyable class is a
> class that:
> 1. Has no nontrivial copy constructors (this also requires no virtual
> functions or virtual bases)
>
> 2. Has no nontrivial move constructors
>
> 3. Has no nontrivial copy assignment operators
>
> 4. Has no nontrivial move assignment operators
>
> 5. Has a trivial destructor
>
> [from cppreference.com, which may or may not be authoritative]
You are correct, I'll just provide some references:
Trivially copyable types are defined in 3.9/9 [basic.types].
[...] Scalar types, trivially copyable class types (Clause 9), arrays of such
types, and cvqualified versions of these types (3.9.3) are collectively
called trivially copyable types. [...]
Trivially copyable class types are defined in 9/6 [class].
A trivially copyable class is a class that:
â€” has no nontrivial copy constructors (12.8),
â€” has no nontrivial move constructors (12.8),
â€” has no nontrivial copy assignment operators (13.5.3, 12.8),
â€” has no nontrivial move assignment operators (13.5.3, 12.8), and
â€” has a trivial destructor (12.4).
A trivial class is a class that has a trivial default constructor (12.1) and
is trivially copyable.
[ Note: In particular, a trivially copyable or trivial class does not have
virtual functions or virtual base
classes. â€” end note ]
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk