Skip to content

Commit 7c82931

Browse files
jensmaurertkoeppe
authored andcommitted
[atomics.syn,atomics.ref.pointer] Remove partial specialization atomic_ref<T*>
A misapplication of paper P3323R1. Fixes NB US 194-314 (C++26 CD).
1 parent e70c392 commit 7c82931

File tree

1 file changed

+29
-31
lines changed

1 file changed

+29
-31
lines changed

source/threads.tex

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2419,8 +2419,6 @@
24192419
namespace std {
24202420
// \ref{atomics.ref.generic}, class template \tcode{atomic_ref}
24212421
template<class T> struct atomic_ref; // freestanding
2422-
// \ref{atomics.ref.pointer}, partial specialization for pointers
2423-
template<class T> struct atomic_ref<T*>; // freestanding
24242422

24252423
// \ref{atomics.types.generic}, class template \tcode{atomic}
24262424
template<class T> struct atomic; // freestanding
@@ -3277,7 +3275,7 @@
32773275
\rSec3[atomics.ref.ops]{Operations}
32783276

32793277
\indexlibrarymember{required_alignment}{atomic_ref}%
3280-
\indexlibrarymember{required_alignment}{atomic_ref<T*>}%
3278+
\indexlibrarymember{required_alignment}{atomic_ref<\placeholder{pointer-type}>}%
32813279
\indexlibrarymember{required_alignment}{atomic_ref<\placeholder{integral-type}>}%
32823280
\indexlibrarymember{required_alignment}{atomic_ref<\placeholder{floating-point-type}>}%
32833281
\begin{itemdecl}
@@ -3303,7 +3301,7 @@
33033301
\end{itemdescr}
33043302

33053303
\indexlibrarymember{is_always_lock_free}{atomic_ref}%
3306-
\indexlibrarymember{is_always_lock_free}{atomic_ref<T*>}%
3304+
\indexlibrarymember{is_always_lock_free}{atomic_ref<\placeholder{pointer-type}>}%
33073305
\indexlibrarymember{is_always_lock_free}{atomic_ref<\placeholder{integral-type}>}%
33083306
\indexlibrarymember{is_always_lock_free}{atomic_ref<\placeholder{floating-point-type}>}%
33093307
\begin{itemdecl}
@@ -3318,7 +3316,7 @@
33183316
\end{itemdescr}
33193317

33203318
\indexlibrarymember{is_lock_free}{atomic_ref}%
3321-
\indexlibrarymember{is_lock_free}{atomic_ref<T*>}%
3319+
\indexlibrarymember{is_lock_free}{atomic_ref<\placeholder{pointer-type}>}%
33223320
\indexlibrarymember{is_lock_free}{atomic_ref<\placeholder{integral-type}>}%
33233321
\indexlibrarymember{is_lock_free}{atomic_ref<\placeholder{floating-point-type}>}%
33243322
\begin{itemdecl}
@@ -3334,7 +3332,7 @@
33343332
\end{itemdescr}
33353333

33363334
\indexlibraryctor{atomic_ref}%
3337-
\indexlibraryctor{atomic_ref<T*>}%
3335+
\indexlibraryctor{atomic_ref<\placeholder{pointer-type}>}%
33383336
\indexlibrary{\idxcode{atomic_ref<\placeholder{integral-type}>}!constructor}%
33393337
\indexlibrary{\idxcode{atomic_ref<\placeholder{floating-point-type}>}!constructor}%
33403338
\begin{itemdecl}
@@ -3356,7 +3354,7 @@
33563354
\end{itemdescr}
33573355

33583356
\indexlibraryctor{atomic_ref}%
3359-
\indexlibraryctor{atomic_ref<T*>}%
3357+
\indexlibraryctor{atomic_ref<\placeholder{pointer-type}>}%
33603358
\indexlibrary{\idxcode{atomic_ref<\placeholder{integral-type}>}!constructor}%
33613359
\indexlibrary{\idxcode{atomic_ref<\placeholder{floating-point-type}>}!constructor}%
33623360
\begin{itemdecl}
@@ -3370,7 +3368,7 @@
33703368
\end{itemdescr}
33713369

33723370
\indexlibrarymember{store}{atomic_ref}%
3373-
\indexlibrarymember{store}{atomic_ref<T*>}%
3371+
\indexlibrarymember{store}{atomic_ref<\placeholder{pointer-type}>}%
33743372
\indexlibrarymember{store}{atomic_ref<\placeholder{integral-type}>}%
33753373
\indexlibrarymember{store}{atomic_ref<\placeholder{floating-point-type}>}%
33763374
\begin{itemdecl}
@@ -3398,7 +3396,7 @@
33983396
\end{itemdescr}
33993397

34003398
\indexlibrarymember{operator=}{atomic_ref}%
3401-
\indexlibrarymember{operator=}{atomic_ref<T*>}%
3399+
\indexlibrarymember{operator=}{atomic_ref<\placeholder{pointer-type}>}%
34023400
\indexlibrarymember{operator=}{atomic_ref<\placeholder{integral-type}>}%
34033401
\indexlibrarymember{operator=}{atomic_ref<\placeholder{floating-point-type}>}%
34043402
\begin{itemdecl}
@@ -3420,7 +3418,7 @@
34203418
\end{itemdescr}
34213419

34223420
\indexlibrarymember{load}{atomic_ref}%
3423-
\indexlibrarymember{load}{atomic_ref<T*>}%
3421+
\indexlibrarymember{load}{atomic_ref<\placeholder{pointer-type}>}%
34243422
\indexlibrarymember{load}{atomic_ref<\placeholder{integral-type}>}%
34253423
\indexlibrarymember{load}{atomic_ref<\placeholder{floating-point-type}>}%
34263424
\begin{itemdecl}
@@ -3445,7 +3443,7 @@
34453443
\end{itemdescr}
34463444

34473445
\indexlibrarymember{operator \placeholder{type}}{atomic_ref}%
3448-
\indexlibrarymember{operator T*}{atomic_ref<T*>}%
3446+
\indexlibrarymember{operator \placeholder{pointer-type}}{atomic_ref<\placeholder{pointer-type}>}%
34493447
\indexlibrarymember{operator \placeholder{integral-type}}{atomic_ref<\placeholder{integral-type}>}%
34503448
\indexlibrarymember{operator \placeholder{floating-point-type}}{atomic_ref<\placeholder{floating-point-type}>}%
34513449
\begin{itemdecl}
@@ -3459,7 +3457,7 @@
34593457
\end{itemdescr}
34603458

34613459
\indexlibrarymember{exchange}{atomic_ref}%
3462-
\indexlibrarymember{exchange}{atomic_ref<T*>}%
3460+
\indexlibrarymember{exchange}{atomic_ref<\placeholder{pointer-type}>}%
34633461
\indexlibrarymember{exchange}{atomic_ref<\placeholder{integral-type}>}%
34643462
\indexlibrarymember{exchange}{atomic_ref<\placeholder{floating-point-type}>}%
34653463
\begin{itemdecl}
@@ -3486,11 +3484,11 @@
34863484
\end{itemdescr}
34873485

34883486
\indexlibrarymember{compare_exchange_weak}{atomic_ref}%
3489-
\indexlibrarymember{compare_exchange_weak}{atomic_ref<T*>}%
3487+
\indexlibrarymember{compare_exchange_weak}{atomic_ref<\placeholder{pointer-type}>}%
34903488
\indexlibrarymember{compare_exchange_weak}{atomic_ref<\placeholder{integral-type}>}%
34913489
\indexlibrarymember{compare_exchange_weak}{atomic_ref<\placeholder{floating-point-type}>}%
34923490
\indexlibrarymember{compare_exchange_strong}{atomic_ref}%
3493-
\indexlibrarymember{compare_exchange_strong}{atomic_ref<T*>}%
3491+
\indexlibrarymember{compare_exchange_strong}{atomic_ref<\placeholder{pointer-type}>}%
34943492
\indexlibrarymember{compare_exchange_strong}{atomic_ref<\placeholder{integral-type}>}%
34953493
\indexlibrarymember{compare_exchange_strong}{atomic_ref<\placeholder{floating-point-type}>}%
34963494
\begin{itemdecl}
@@ -4169,8 +4167,8 @@
41694167
\tcode{return fetch_\placeholder{key}(operand) \placeholdernc{op} operand;}
41704168
\end{itemdescr}
41714169

4172-
\rSec3[atomics.ref.pointer]{Partial specialization for pointers}
4173-
\indexlibraryglobal{atomic_ref<T*>}%
4170+
\rSec3[atomics.ref.pointer]{Specialization for pointers}
4171+
\indexlibraryglobal{atomic_ref<\placeholder{pointer-type}>}%
41744172

41754173
\pnum
41764174
There are specializations of the \tcode{atomic_ref} class template
@@ -4186,7 +4184,7 @@
41864184

41874185
\begin{codeblock}
41884186
namespace std {
4189-
template<class T> struct atomic_ref<@\placeholder{pointer-type}@> {
4187+
template<> struct atomic_ref<@\placeholder{pointer-type}@> {
41904188
private:
41914189
@\placeholder{pointer-type}@* ptr; // \expos
41924190

@@ -4260,10 +4258,10 @@
42604258
The correspondence among key, operator, and computation is specified
42614259
in \tref{atomic.types.pointer.comp}.
42624260

4263-
\indexlibrarymember{fetch_add}{atomic_ref<T*>}%
4264-
\indexlibrarymember{fetch_sub}{atomic_ref<T*>}%
4265-
\indexlibrarymember{fetch_max}{atomic_ref<T*>}%
4266-
\indexlibrarymember{fetch_min}{atomic_ref<T*>}%
4261+
\indexlibrarymember{fetch_add}{atomic_ref<\placeholder{pointer-type}>}%
4262+
\indexlibrarymember{fetch_sub}{atomic_ref<\placeholder{pointer-type}>}%
4263+
\indexlibrarymember{fetch_max}{atomic_ref<\placeholder{pointer-type}>}%
4264+
\indexlibrarymember{fetch_min}{atomic_ref<\placeholder{pointer-type}>}%
42674265
\begin{itemdecl}
42684266
constexpr value_type fetch_@\placeholdernc{key}@(difference_type operand,
42694267
memory_order order = memory_order::seq_cst) const noexcept;
@@ -4309,10 +4307,10 @@
43094307
\end{note}
43104308
\end{itemdescr}
43114309

4312-
\indexlibrarymember{store_add}{atomic_ref<T*>}%
4313-
\indexlibrarymember{store_sub}{atomic_ref<T*>}%
4314-
\indexlibrarymember{store_max}{atomic_ref<T*>}%
4315-
\indexlibrarymember{store_min}{atomic_ref<T*>}%
4310+
\indexlibrarymember{store_add}{atomic_ref<\placeholder{pointer-type}>}%
4311+
\indexlibrarymember{store_sub}{atomic_ref<\placeholder{pointer-type}>}%
4312+
\indexlibrarymember{store_max}{atomic_ref<\placeholder{pointer-type}>}%
4313+
\indexlibrarymember{store_min}{atomic_ref<\placeholder{pointer-type}>}%
43164314
\begin{itemdecl}
43174315
constexpr void store_@\placeholdernc{key}@(@\UNSP{see above}@ operand,
43184316
memory_order order = memory_order::seq_cst) const noexcept;
@@ -4352,8 +4350,8 @@
43524350
\end{note}
43534351
\end{itemdescr}
43544352

4355-
\indexlibrarymember{operator+=}{atomic_ref<T*>}%
4356-
\indexlibrarymember{operator-=}{atomic_ref<T*>}%
4353+
\indexlibrarymember{operator+=}{atomic_ref<\placeholder{pointer-type}>}%
4354+
\indexlibrarymember{operator-=}{atomic_ref<\placeholder{pointer-type}>}%
43574355
\begin{itemdecl}
43584356
constexpr value_type operator @\placeholder{op}@=(difference_type operand) const noexcept;
43594357
\end{itemdecl}
@@ -4380,7 +4378,7 @@
43804378
for the specializations in \ref{atomics.ref.int}.
43814379

43824380

4383-
\indexlibrarymember{operator++}{atomic_ref<T*>}%
4381+
\indexlibrarymember{operator++}{atomic_ref<\placeholder{pointer-type}>}%
43844382
\indexlibrarymember{operator++}{atomic_ref<\placeholder{integral-type}>}%
43854383
\begin{itemdecl}
43864384
constexpr value_type operator++(int) const noexcept;
@@ -4396,7 +4394,7 @@
43964394
Equivalent to: \tcode{return fetch_add(1);}
43974395
\end{itemdescr}
43984396

4399-
\indexlibrarymember{operator--}{atomic_ref<T*>}%
4397+
\indexlibrarymember{operator--}{atomic_ref<\placeholder{pointer-type}>}%
44004398
\indexlibrarymember{operator--}{atomic_ref<\placeholder{integral-type}>}%
44014399
\begin{itemdecl}
44024400
constexpr value_type operator--(int) const noexcept;
@@ -4412,7 +4410,7 @@
44124410
Equivalent to: \tcode{return fetch_sub(1);}
44134411
\end{itemdescr}
44144412

4415-
\indexlibrarymember{operator++}{atomic_ref<T*>}%
4413+
\indexlibrarymember{operator++}{atomic_ref<\placeholder{pointer-type}>}%
44164414
\indexlibrarymember{operator++}{atomic_ref<\placeholder{integral-type}>}%
44174415
\begin{itemdecl}
44184416
constexpr value_type operator++() const noexcept;
@@ -4428,7 +4426,7 @@
44284426
Equivalent to: \tcode{return fetch_add(1) + 1;}
44294427
\end{itemdescr}
44304428

4431-
\indexlibrarymember{operator--}{atomic_ref<T*>}%
4429+
\indexlibrarymember{operator--}{atomic_ref<\placeholder{pointer-type}>}%
44324430
\indexlibrarymember{operator--}{atomic_ref<\placeholder{integral-type}>}%
44334431
\begin{itemdecl}
44344432
constexpr value_type operator--() const noexcept;

0 commit comments

Comments
 (0)