This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD Editorial status.
Section: 33.5.8.2 [atomics.types.operations] Status: NAD Editorial Submitter: Anthony Williams Opened: 2008-07-10 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [atomics.types.operations].
View all issues with NAD Editorial status.
Discussion:
There's an error in 33.5.8.2 [atomics.types.operations]/p9:
C atomic_load(const volatile A * object); C atomic_load_explicit(const volatile A * object, memory_order); C A ::load(memory_order order = memory_order_seq_cst) const volatile;Requires: The order argument shall not be memory_order_acquire nor memory_order_acq_rel.
I believe that this should state
shall not be memory_order_release.
There's also an error in 33.5.8.2 [atomics.types.operations]/p17:
... When only one memory_order argument is supplied, the value of success is order, and the value of failure is order except that a value of memory_order_acq_rel shall be replaced by the value memory_order_require ...
I believe this should state
shall be replaced by the value memory_order_acquire ...
Proposed resolution:
Change 33.5.8.2 [atomics.types.operations]/p9:
C atomic_load(const volatile A * object); C atomic_load_explicit(const volatile A * object, memory_order); C A ::load(memory_order order = memory_order_seq_cst) const volatile;Requires: The order argument shall not be
memory_order_acquirememory_order_release nor memory_order_acq_rel.
Change 33.5.8.2 [atomics.types.operations]/p17:
... When only one memory_order argument is supplied, the value of success is order, and the value of failure is order except that a value of memory_order_acq_rel shall be replaced by the value
memory_order_requirememory_order_acquire ...
Rationale:
Already fixed by the time the LWG processed it.