|
2419 | 2419 | namespace std {
|
2420 | 2420 | // \ref{atomics.ref.generic}, class template \tcode{atomic_ref}
|
2421 | 2421 | 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 |
2424 | 2422 |
|
2425 | 2423 | // \ref{atomics.types.generic}, class template \tcode{atomic}
|
2426 | 2424 | template<class T> struct atomic; // freestanding
|
|
3277 | 3275 | \rSec3[atomics.ref.ops]{Operations}
|
3278 | 3276 |
|
3279 | 3277 | \indexlibrarymember{required_alignment}{atomic_ref}%
|
3280 |
| -\indexlibrarymember{required_alignment}{atomic_ref<T*>}% |
| 3278 | +\indexlibrarymember{required_alignment}{atomic_ref<\placeholder{pointer-type}>}% |
3281 | 3279 | \indexlibrarymember{required_alignment}{atomic_ref<\placeholder{integral-type}>}%
|
3282 | 3280 | \indexlibrarymember{required_alignment}{atomic_ref<\placeholder{floating-point-type}>}%
|
3283 | 3281 | \begin{itemdecl}
|
|
3303 | 3301 | \end{itemdescr}
|
3304 | 3302 |
|
3305 | 3303 | \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}>}% |
3307 | 3305 | \indexlibrarymember{is_always_lock_free}{atomic_ref<\placeholder{integral-type}>}%
|
3308 | 3306 | \indexlibrarymember{is_always_lock_free}{atomic_ref<\placeholder{floating-point-type}>}%
|
3309 | 3307 | \begin{itemdecl}
|
|
3318 | 3316 | \end{itemdescr}
|
3319 | 3317 |
|
3320 | 3318 | \indexlibrarymember{is_lock_free}{atomic_ref}%
|
3321 |
| -\indexlibrarymember{is_lock_free}{atomic_ref<T*>}% |
| 3319 | +\indexlibrarymember{is_lock_free}{atomic_ref<\placeholder{pointer-type}>}% |
3322 | 3320 | \indexlibrarymember{is_lock_free}{atomic_ref<\placeholder{integral-type}>}%
|
3323 | 3321 | \indexlibrarymember{is_lock_free}{atomic_ref<\placeholder{floating-point-type}>}%
|
3324 | 3322 | \begin{itemdecl}
|
|
3334 | 3332 | \end{itemdescr}
|
3335 | 3333 |
|
3336 | 3334 | \indexlibraryctor{atomic_ref}%
|
3337 |
| -\indexlibraryctor{atomic_ref<T*>}% |
| 3335 | +\indexlibraryctor{atomic_ref<\placeholder{pointer-type}>}% |
3338 | 3336 | \indexlibrary{\idxcode{atomic_ref<\placeholder{integral-type}>}!constructor}%
|
3339 | 3337 | \indexlibrary{\idxcode{atomic_ref<\placeholder{floating-point-type}>}!constructor}%
|
3340 | 3338 | \begin{itemdecl}
|
|
3356 | 3354 | \end{itemdescr}
|
3357 | 3355 |
|
3358 | 3356 | \indexlibraryctor{atomic_ref}%
|
3359 |
| -\indexlibraryctor{atomic_ref<T*>}% |
| 3357 | +\indexlibraryctor{atomic_ref<\placeholder{pointer-type}>}% |
3360 | 3358 | \indexlibrary{\idxcode{atomic_ref<\placeholder{integral-type}>}!constructor}%
|
3361 | 3359 | \indexlibrary{\idxcode{atomic_ref<\placeholder{floating-point-type}>}!constructor}%
|
3362 | 3360 | \begin{itemdecl}
|
|
3370 | 3368 | \end{itemdescr}
|
3371 | 3369 |
|
3372 | 3370 | \indexlibrarymember{store}{atomic_ref}%
|
3373 |
| -\indexlibrarymember{store}{atomic_ref<T*>}% |
| 3371 | +\indexlibrarymember{store}{atomic_ref<\placeholder{pointer-type}>}% |
3374 | 3372 | \indexlibrarymember{store}{atomic_ref<\placeholder{integral-type}>}%
|
3375 | 3373 | \indexlibrarymember{store}{atomic_ref<\placeholder{floating-point-type}>}%
|
3376 | 3374 | \begin{itemdecl}
|
|
3398 | 3396 | \end{itemdescr}
|
3399 | 3397 |
|
3400 | 3398 | \indexlibrarymember{operator=}{atomic_ref}%
|
3401 |
| -\indexlibrarymember{operator=}{atomic_ref<T*>}% |
| 3399 | +\indexlibrarymember{operator=}{atomic_ref<\placeholder{pointer-type}>}% |
3402 | 3400 | \indexlibrarymember{operator=}{atomic_ref<\placeholder{integral-type}>}%
|
3403 | 3401 | \indexlibrarymember{operator=}{atomic_ref<\placeholder{floating-point-type}>}%
|
3404 | 3402 | \begin{itemdecl}
|
|
3420 | 3418 | \end{itemdescr}
|
3421 | 3419 |
|
3422 | 3420 | \indexlibrarymember{load}{atomic_ref}%
|
3423 |
| -\indexlibrarymember{load}{atomic_ref<T*>}% |
| 3421 | +\indexlibrarymember{load}{atomic_ref<\placeholder{pointer-type}>}% |
3424 | 3422 | \indexlibrarymember{load}{atomic_ref<\placeholder{integral-type}>}%
|
3425 | 3423 | \indexlibrarymember{load}{atomic_ref<\placeholder{floating-point-type}>}%
|
3426 | 3424 | \begin{itemdecl}
|
|
3445 | 3443 | \end{itemdescr}
|
3446 | 3444 |
|
3447 | 3445 | \indexlibrarymember{operator \placeholder{type}}{atomic_ref}%
|
3448 |
| -\indexlibrarymember{operator T*}{atomic_ref<T*>}% |
| 3446 | +\indexlibrarymember{operator \placeholder{pointer-type}}{atomic_ref<\placeholder{pointer-type}>}% |
3449 | 3447 | \indexlibrarymember{operator \placeholder{integral-type}}{atomic_ref<\placeholder{integral-type}>}%
|
3450 | 3448 | \indexlibrarymember{operator \placeholder{floating-point-type}}{atomic_ref<\placeholder{floating-point-type}>}%
|
3451 | 3449 | \begin{itemdecl}
|
|
3459 | 3457 | \end{itemdescr}
|
3460 | 3458 |
|
3461 | 3459 | \indexlibrarymember{exchange}{atomic_ref}%
|
3462 |
| -\indexlibrarymember{exchange}{atomic_ref<T*>}% |
| 3460 | +\indexlibrarymember{exchange}{atomic_ref<\placeholder{pointer-type}>}% |
3463 | 3461 | \indexlibrarymember{exchange}{atomic_ref<\placeholder{integral-type}>}%
|
3464 | 3462 | \indexlibrarymember{exchange}{atomic_ref<\placeholder{floating-point-type}>}%
|
3465 | 3463 | \begin{itemdecl}
|
|
3486 | 3484 | \end{itemdescr}
|
3487 | 3485 |
|
3488 | 3486 | \indexlibrarymember{compare_exchange_weak}{atomic_ref}%
|
3489 |
| -\indexlibrarymember{compare_exchange_weak}{atomic_ref<T*>}% |
| 3487 | +\indexlibrarymember{compare_exchange_weak}{atomic_ref<\placeholder{pointer-type}>}% |
3490 | 3488 | \indexlibrarymember{compare_exchange_weak}{atomic_ref<\placeholder{integral-type}>}%
|
3491 | 3489 | \indexlibrarymember{compare_exchange_weak}{atomic_ref<\placeholder{floating-point-type}>}%
|
3492 | 3490 | \indexlibrarymember{compare_exchange_strong}{atomic_ref}%
|
3493 |
| -\indexlibrarymember{compare_exchange_strong}{atomic_ref<T*>}% |
| 3491 | +\indexlibrarymember{compare_exchange_strong}{atomic_ref<\placeholder{pointer-type}>}% |
3494 | 3492 | \indexlibrarymember{compare_exchange_strong}{atomic_ref<\placeholder{integral-type}>}%
|
3495 | 3493 | \indexlibrarymember{compare_exchange_strong}{atomic_ref<\placeholder{floating-point-type}>}%
|
3496 | 3494 | \begin{itemdecl}
|
|
4169 | 4167 | \tcode{return fetch_\placeholder{key}(operand) \placeholdernc{op} operand;}
|
4170 | 4168 | \end{itemdescr}
|
4171 | 4169 |
|
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}>}% |
4174 | 4172 |
|
4175 | 4173 | \pnum
|
4176 | 4174 | There are specializations of the \tcode{atomic_ref} class template
|
|
4186 | 4184 |
|
4187 | 4185 | \begin{codeblock}
|
4188 | 4186 | namespace std {
|
4189 |
| - template<class T> struct atomic_ref<@\placeholder{pointer-type}@> { |
| 4187 | + template<> struct atomic_ref<@\placeholder{pointer-type}@> { |
4190 | 4188 | private:
|
4191 | 4189 | @\placeholder{pointer-type}@* ptr; // \expos
|
4192 | 4190 |
|
|
4260 | 4258 | The correspondence among key, operator, and computation is specified
|
4261 | 4259 | in \tref{atomic.types.pointer.comp}.
|
4262 | 4260 |
|
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}>}% |
4267 | 4265 | \begin{itemdecl}
|
4268 | 4266 | constexpr value_type fetch_@\placeholdernc{key}@(difference_type operand,
|
4269 | 4267 | memory_order order = memory_order::seq_cst) const noexcept;
|
|
4309 | 4307 | \end{note}
|
4310 | 4308 | \end{itemdescr}
|
4311 | 4309 |
|
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}>}% |
4316 | 4314 | \begin{itemdecl}
|
4317 | 4315 | constexpr void store_@\placeholdernc{key}@(@\UNSP{see above}@ operand,
|
4318 | 4316 | memory_order order = memory_order::seq_cst) const noexcept;
|
|
4352 | 4350 | \end{note}
|
4353 | 4351 | \end{itemdescr}
|
4354 | 4352 |
|
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}>}% |
4357 | 4355 | \begin{itemdecl}
|
4358 | 4356 | constexpr value_type operator @\placeholder{op}@=(difference_type operand) const noexcept;
|
4359 | 4357 | \end{itemdecl}
|
|
4380 | 4378 | for the specializations in \ref{atomics.ref.int}.
|
4381 | 4379 |
|
4382 | 4380 |
|
4383 |
| -\indexlibrarymember{operator++}{atomic_ref<T*>}% |
| 4381 | +\indexlibrarymember{operator++}{atomic_ref<\placeholder{pointer-type}>}% |
4384 | 4382 | \indexlibrarymember{operator++}{atomic_ref<\placeholder{integral-type}>}%
|
4385 | 4383 | \begin{itemdecl}
|
4386 | 4384 | constexpr value_type operator++(int) const noexcept;
|
|
4396 | 4394 | Equivalent to: \tcode{return fetch_add(1);}
|
4397 | 4395 | \end{itemdescr}
|
4398 | 4396 |
|
4399 |
| -\indexlibrarymember{operator--}{atomic_ref<T*>}% |
| 4397 | +\indexlibrarymember{operator--}{atomic_ref<\placeholder{pointer-type}>}% |
4400 | 4398 | \indexlibrarymember{operator--}{atomic_ref<\placeholder{integral-type}>}%
|
4401 | 4399 | \begin{itemdecl}
|
4402 | 4400 | constexpr value_type operator--(int) const noexcept;
|
|
4412 | 4410 | Equivalent to: \tcode{return fetch_sub(1);}
|
4413 | 4411 | \end{itemdescr}
|
4414 | 4412 |
|
4415 |
| -\indexlibrarymember{operator++}{atomic_ref<T*>}% |
| 4413 | +\indexlibrarymember{operator++}{atomic_ref<\placeholder{pointer-type}>}% |
4416 | 4414 | \indexlibrarymember{operator++}{atomic_ref<\placeholder{integral-type}>}%
|
4417 | 4415 | \begin{itemdecl}
|
4418 | 4416 | constexpr value_type operator++() const noexcept;
|
|
4428 | 4426 | Equivalent to: \tcode{return fetch_add(1) + 1;}
|
4429 | 4427 | \end{itemdescr}
|
4430 | 4428 |
|
4431 |
| -\indexlibrarymember{operator--}{atomic_ref<T*>}% |
| 4429 | +\indexlibrarymember{operator--}{atomic_ref<\placeholder{pointer-type}>}% |
4432 | 4430 | \indexlibrarymember{operator--}{atomic_ref<\placeholder{integral-type}>}%
|
4433 | 4431 | \begin{itemdecl}
|
4434 | 4432 | constexpr value_type operator--() const noexcept;
|
|
0 commit comments