This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD status.
memory_order::memory_order_foo broken in C++20Section: 32.5.4 [atomics.order] Status: NAD Submitter: Eric Fiselier Opened: 2019-08-31 Last modified: 2026-06-15
Priority: 4
View other active issues in [atomics.order].
View all other issues in [atomics.order].
View all issues with NAD status.
Discussion:
P0439R0 renamed the std::memory_order enumerators
when making it a scoped enumeration. The paper makes the old unscoped names available in the
global namespace, but not within the scope of the enumeration.
std::memory_order::memory_order_consume is no longer well-formed but
std::memory_order::consume and std::memory_order_consume are.
In order to prevent unnecessary breakage, we should re-add the memory_order_foo names
to the enumeration.
[2019-10 Priority set to 4 after reflector discussion]
[Brno 2026-06-12; Status changed: New → NAD.]
LWG noted that two major implementations have removed these enumerators. One of them reported that they have not received any reports relating to this removal after 8 years. LWG does not believe that it is necessary to re-add these names to the standard.
Proposed resolution:
This wording is relative to N4830.
Add a new sub-clause at the end of Clause D [depr] as indicated:
D.?? Deprecated
-?- The following enumerators are declared in addition to those specified in 32.5.4 [atomics.order]:memory_orderenumeratorsnamespace std { enum class memory_order : unspecified { memory_order_relaxed = relaxed, memory_order_consume = consume, memory_order_acquire = acquire, memory_order_release = release, memory_order_acq_rel = acq_rel, memory_order_seq_cst = seq_cst }; }