|
2397 | 2397 |
|
2398 | 2398 | \rSec2[atomics.general]{General} |
2399 | 2399 |
|
| 2400 | +\pnum |
| 2401 | +Let \tcode{\placeholdernc{COPYCV}(FROM, TO)} be an alias for type \tcode{TO} |
| 2402 | +with the addition of \tcode{FROM}'s top-level cv-qualifiers. |
| 2403 | + |
2400 | 2404 | \pnum |
2401 | 2405 | Subclause \ref{atomics} describes components for fine-grained atomic access. |
2402 | 2406 | This access is provided via operations on atomic objects. |
|
3153 | 3157 |
|
3154 | 3158 | public: |
3155 | 3159 | using value_type = remove_cv_t<T>; |
| 3160 | + using @\exposid{address-return-type}@ = @\placeholdernc{COPYCV}@(T, void)*; // \expos |
3156 | 3161 | static constexpr size_t required_alignment = @\impdefx{required alignment for \tcode{atomic_ref} type's operations}@; |
3157 | 3162 |
|
3158 | 3163 | static constexpr bool is_always_lock_free = @\impdefx{whether a given \tcode{atomic_ref} type's operations are always lock free}@; |
|
3184 | 3189 | constexpr void wait(value_type, memory_order = memory_order::seq_cst) const noexcept; |
3185 | 3190 | constexpr void notify_one() const noexcept; |
3186 | 3191 | constexpr void notify_all() const noexcept; |
3187 | | - constexpr T* address() const noexcept; |
| 3192 | + constexpr @\exposid{address-return-type}@ address() const noexcept; |
3188 | 3193 | }; |
3189 | 3194 | } |
3190 | 3195 | \end{codeblock} |
|
3620 | 3625 |
|
3621 | 3626 | \indexlibrarymember{address}{atomic_ref<T>}% |
3622 | 3627 | \begin{itemdecl} |
3623 | | -constexpr T* address() const noexcept; |
| 3628 | +constexpr @\exposid{address-return-type}@ address() const noexcept; |
3624 | 3629 | \end{itemdecl} |
3625 | 3630 |
|
3626 | 3631 | \begin{itemdescr} |
|
3657 | 3662 | public: |
3658 | 3663 | using value_type = remove_cv_t<@\placeholder{integral-type}@>; |
3659 | 3664 | using difference_type = value_type; |
| 3665 | + using @\exposid{address-return-type}@ = @\placeholdernc{COPYCV}@(@\placeholder{integral-type}@, void)*; // \expos |
3660 | 3666 | static constexpr size_t required_alignment = @\impdefx{required alignment for \tcode{atomic_ref} type's operations}@; |
3661 | 3667 |
|
3662 | 3668 | static constexpr bool is_always_lock_free = @\impdefx{whether a given \tcode{atomic_ref} type's operations are always lock free}@; |
|
3728 | 3734 | constexpr void wait(value_type, memory_order = memory_order::seq_cst) const noexcept; |
3729 | 3735 | constexpr void notify_one() const noexcept; |
3730 | 3736 | constexpr void notify_all() const noexcept; |
3731 | | - constexpr @\placeholder{integral-type}@* address() const noexcept; |
| 3737 | + constexpr @\exposid{address-return-type}@ address() const noexcept; |
3732 | 3738 | }; |
3733 | 3739 | } |
3734 | 3740 | \end{codeblock} |
|
3882 | 3888 | public: |
3883 | 3889 | using value_type = remove_cv_t<@\placeholder{floating-point-type}@>; |
3884 | 3890 | using difference_type = value_type; |
| 3891 | + using @\exposid{address-return-type}@ = @\placeholdernc{COPYCV}@(@\placeholder{floating-point-type}@, void)*; // \expos |
3885 | 3892 | static constexpr size_t required_alignment = @\impdefx{required alignment for \tcode{atomic_ref} type's operations}@; |
3886 | 3893 |
|
3887 | 3894 | static constexpr bool is_always_lock_free = @\impdefx{whether a given \tcode{atomic_ref} type's operations are always lock free}@; |
|
3949 | 3956 | memory_order = memory_order::seq_cst) const noexcept; |
3950 | 3957 | constexpr void notify_one() const noexcept; |
3951 | 3958 | constexpr void notify_all() const noexcept; |
3952 | | - constexpr @\placeholder{floating-point-type}@* address() const noexcept; |
| 3959 | + constexpr @\exposid{address-return-type}@ address() const noexcept; |
3953 | 3960 | }; |
3954 | 3961 | } |
3955 | 3962 | \end{codeblock} |
|
4177 | 4184 | public: |
4178 | 4185 | using value_type = remove_cv_t<@\placeholder{pointer-type}@>; |
4179 | 4186 | using difference_type = ptrdiff_t; |
| 4187 | + using @\exposid{address-return-type}@ = @\placeholdernc{COPYCV}@(@\placeholder{pointer-type}@, void)*; // \expos |
4180 | 4188 | static constexpr size_t required_alignment = @\impdefx{required alignment for \tcode{atomic_ref} type's operations}@; |
4181 | 4189 |
|
4182 | 4190 | static constexpr bool is_always_lock_free = @\impdefx{whether a given \tcode{atomic_ref} type's operations are always lock free}@; |
|
4233 | 4241 | constexpr void wait(value_type, memory_order = memory_order::seq_cst) const noexcept; |
4234 | 4242 | constexpr void notify_one() const noexcept; |
4235 | 4243 | constexpr void notify_all() const noexcept; |
4236 | | - constexpr @\placeholder{pointer-type}@* address() const noexcept; |
| 4244 | + constexpr @\placeholder{address-return-type}@ address() const noexcept; |
4237 | 4245 | }; |
4238 | 4246 | } |
4239 | 4247 | \end{codeblock} |
|
0 commit comments