Section: 32.5 [atomics] Status: NAD Editorial Submitter: Alexander Chemeris Opened: 2008-08-24 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [atomics].
View all issues with NAD Editorial status.
Discussion:
The atomic_address type and atomic<T*> specialization provide atomic
updates to pointers. However, the current specification requires
that the types pointer be to non-const objects. This restriction
is unnecessary and unintended.
[ Summit: ]
Move to review. Lawrence will first check with Peter whether the current examples are sufficient, or whether they need to be expanded to include all cases.
[ 2009-07 Frankfurt ]
Lawrence will handle all issues relating to atomics in a single paper.
LWG will defer discussion on atomics until that paper appears.
Move to Open.
[ 2009-08-17 Handled by N2925. ]
[ 2009-10 Santa Cruz: ]
NAD Editorial. Solved by N2992.
Proposed resolution:
Add const qualification to the pointer values of the atomic_address
and atomic<T*> specializations. E.g.
typedef struct atomic_address {
void store(const void*, memory_order = memory_order_seq_cst) volatile;
void* exchange( const void*, memory_order = memory_order_seq_cst) volatile;
bool compare_exchange( const void*&, const void*,
memory_order, memory_order) volatile;
bool compare_exchange( const void*&, const void*,
memory_order = memory_order_seq_cst ) volatile;
void* operator=(const void*) volatile;
} atomic_address;
void atomic_store(volatile atomic_address*, const void*);
void atomic_store_explicit(volatile atomic_address*, const void*,
memory_order);
void* atomic_exchange(volatile atomic_address*, const void*);
void* atomic_exchange_explicit(volatile atomic_address*, const void*,
memory_order);
bool atomic_compare_exchange(volatile atomic_address*,
const void**, const void*);
bool atomic_compare_exchange_explicit(volatile atomic_address*,
const void**, const void*,
memory_order, memory_order);