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.
atomic<void*>
should use generic class templateSection: 32.5.8.5 [atomics.types.pointer] Status: New Submitter: Gonzalo Brito Opened: 2025-01-16 Last modified: 2025-01-19
Priority: Not Prioritized
View other active issues in [atomics.types.pointer].
View all other issues in [atomics.types.pointer].
View all issues with New status.
Discussion:
32.5.8.5 [atomics.types.pointer] p1 states (emphasis mine):
There is a partial specialization of the
atomic
class template for pointers.
which requires atomic<void*>
to use the atomic
class template for pointers.
However, the fetch_add
/_sub
member functions add a difference_type
to a T*
which requires a pointer-to-object type (these member functions are constexpr
,
so trying to support this seems unimplementable).
atomic_ref
, the 32.5.7.5 [atomics.ref.pointer] p1 states (emphasis mine):
There are specializations of the
atomic_ref
` class template for all pointer-to-object types.
which avoids this issue and applying the same form to 32.5.8.5 [atomics.types.pointer] would make
atomic<void*>
and atomic_ref<void*>
consistent.
atomic<void*>
uses the general template. Therefore, no user
code seems to be impacted.
Proposed resolution:
This wording is relative to N5001.
Modify 32.5.8.5 [atomics.types.pointer] as indicated:
-1- There is a partial specialization of the
atomic
class template forpointerspointer-to-object types. Specializations of this partial specialization are standard-layout structs. They each have a trivial destructor.