[atomic.ref.generic] Issues regarding P3323R1
Nobody has claimed this yet.
- Dominant language
- TeX
- Stars
- 221
- Forks
- 813
- Avg merge
- 16h 4m
- Merged PRs (30d)
- 36
Description
Issue 1: The paper adds this paragraph to multiple sections:
The program is ill-formed if
is_always_lock_freeisfalseandis_volatile_v<T>istrue.
For the main template, it is OK, but there are issues with the (partial) specializations:
- For the integral and floating-point specializations, there is no template parameter
T, sois_volatile_v<T>cannot be well-formed. - For the pointer partial specialization,
Trefers to the pointed-to type, testing whether it is volatile is definitely not the intention of the author.
Issue 2: The paper adds this paragraph to [atomics.ref.pointer]:
There are specializations of the
atomic_refclass template for all pointer-to-object types. For each such
type pointer-type, the specializationatomic_ref<pointer-type>provides additional atomic operations
appropriate to pointer types.
This paragraph seems to identify the pointer specializations as explicit (full) specializations, but it is impossible to enumerate all pointer(-to-object) types. The wording also implies that pointer-to-function types should match the main template, which is currently not the case. Currently, pointer-to-function types match the partial specialization, and such specializations can invoke the member functions that are also provided in the main template (the additional operations are guarded by [atomics.ref.pointer] p6). We should not change this.
We should keep the partial specialization, and we need to redefine atomic_ref<pointer-type> to make use of the template parameter T.
Suggested resolution (I can file a PR if CWG agrees with this direction):
- [atomics.ref.int] p2: Replace
is_volatile_v<T>withis_volatile_v<integral-type>. - [atomics.ref.float] p2: Replace
is_volatile_v<T>withis_volatile_v<floating-point-type>. - [atomics.ref.pointer] p1: Replace paragraph with:
There are partial specializations of the
atomic_refclass template for all pointer types. For each type-id pointer-type amongT*,T* const,T* volatile, andT* const volatile, the partial specializationatomic_ref<pointer-type>provides additional atomic operations appropriate to pointer-to-object types.
- [atomics.ref.pointer] p2: Replace
is_volatile_v<T>withis_volatile_v<pointer-type>.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Search the draft for [atomics.ref.int], [atomics.ref.float], and [atomics.ref.pointer], then compare the existing paragraphs with the suggested resolution. Done means correcting the is_volatile_v references and describing the pointer cases as partial specializations without changing the stated pointer-to-function behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, tex
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100