This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

### 3268. `memory_order::memory_order_foo` broken in C++20

Section: 31.4 [atomics.order] Status: New Submitter: Eric Fiselier Opened: 2019-08-31 Last modified: 2020-09-06

Priority: 4

View other active issues in [atomics.order].

View all other issues in [atomics.order].

View all issues with New 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.

For example:

`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]

Proposed resolution:

This wording is relative to N4830.

1. Add a new sub-clause at the end of Clause D [depr] as indicated:

   > D.?? Deprecated `memory_order` enumerators

   > -?- The following enumerators are declared in addition to those specified in 31.4 [atomics.order]:

   > >     namespace 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
   > >       };
   > >     }