@@ -3812,9 +3812,10 @@ class alignas(2 * sizeof(void*)) _Atomic_ptr_base {
3812
3812
protected:
3813
3813
constexpr _Atomic_ptr_base() noexcept = default;
3814
3814
3815
- _Atomic_ptr_base(_Ty* const _Px, _Ref_count_base* const _Ref) noexcept : _Ptr(_Px), _Repptr(_Ref) {}
3815
+ _Atomic_ptr_base(remove_extent_t<_Ty>* const _Px, _Ref_count_base* const _Ref) noexcept
3816
+ : _Ptr(_Px), _Repptr(_Ref) {}
3816
3817
3817
- void _Wait(_Ty* _Old, memory_order) const noexcept {
3818
+ void _Wait(remove_extent_t< _Ty> * _Old, memory_order) const noexcept {
3818
3819
for (;;) {
3819
3820
auto _Rep = _Repptr._Lock_and_load();
3820
3821
bool _Equal = _Ptr.load(memory_order_relaxed) == _Old;
@@ -3834,7 +3835,7 @@ protected:
3834
3835
_Ptr.notify_all();
3835
3836
}
3836
3837
3837
- atomic<_Ty*> _Ptr{nullptr};
3838
+ atomic<remove_extent_t< _Ty> *> _Ptr{nullptr};
3838
3839
mutable _Locked_pointer<_Ref_count_base> _Repptr;
3839
3840
};
3840
3841
@@ -3854,9 +3855,9 @@ public:
3854
3855
3855
3856
void store(shared_ptr<_Ty> _Value, const memory_order _Order = memory_order_seq_cst) noexcept {
3856
3857
_Check_store_memory_order(_Order);
3857
- const auto _Rep = this->_Repptr._Lock_and_load();
3858
- _Ty* const _Tmp = _Value._Ptr;
3859
- _Value._Ptr = this->_Ptr.load(memory_order_relaxed);
3858
+ const auto _Rep = this->_Repptr._Lock_and_load();
3859
+ remove_extent_t< _Ty> * const _Tmp = _Value._Ptr;
3860
+ _Value._Ptr = this->_Ptr.load(memory_order_relaxed);
3860
3861
this->_Ptr.store(_Tmp, memory_order_relaxed);
3861
3862
this->_Repptr._Store_and_unlock(_Value._Rep);
3862
3863
_Value._Rep = _Rep;
@@ -3909,8 +3910,8 @@ public:
3909
3910
_Check_memory_order(_Order);
3910
3911
auto _Rep = this->_Repptr._Lock_and_load();
3911
3912
if (this->_Ptr.load(memory_order_relaxed) == _Expected._Ptr && _Rep == _Expected._Rep) {
3912
- _Ty* const _Tmp = _Desired._Ptr;
3913
- _Desired._Ptr = this->_Ptr.load(memory_order_relaxed);
3913
+ remove_extent_t< _Ty> * const _Tmp = _Desired._Ptr;
3914
+ _Desired._Ptr = this->_Ptr.load(memory_order_relaxed);
3914
3915
this->_Ptr.store(_Tmp, memory_order_relaxed);
3915
3916
_STD swap(_Rep, _Desired._Rep);
3916
3917
this->_Repptr._Store_and_unlock(_Rep);
@@ -3971,9 +3972,9 @@ public:
3971
3972
3972
3973
void store(weak_ptr<_Ty> _Value, const memory_order _Order = memory_order_seq_cst) noexcept {
3973
3974
_Check_store_memory_order(_Order);
3974
- const auto _Rep = this->_Repptr._Lock_and_load();
3975
- _Ty* const _Tmp = _Value._Ptr;
3976
- _Value._Ptr = this->_Ptr.load(memory_order_relaxed);
3975
+ const auto _Rep = this->_Repptr._Lock_and_load();
3976
+ remove_extent_t< _Ty> * const _Tmp = _Value._Ptr;
3977
+ _Value._Ptr = this->_Ptr.load(memory_order_relaxed);
3977
3978
this->_Ptr.store(_Tmp, memory_order_relaxed);
3978
3979
this->_Repptr._Store_and_unlock(_Value._Rep);
3979
3980
_Value._Rep = _Rep;
@@ -4026,8 +4027,8 @@ public:
4026
4027
_Check_memory_order(_Order);
4027
4028
auto _Rep = this->_Repptr._Lock_and_load();
4028
4029
if (this->_Ptr.load(memory_order_relaxed) == _Expected._Ptr && _Rep == _Expected._Rep) {
4029
- _Ty* const _Tmp = _Desired._Ptr;
4030
- _Desired._Ptr = this->_Ptr.load(memory_order_relaxed);
4030
+ remove_extent_t< _Ty> * const _Tmp = _Desired._Ptr;
4031
+ _Desired._Ptr = this->_Ptr.load(memory_order_relaxed);
4031
4032
this->_Ptr.store(_Tmp, memory_order_relaxed);
4032
4033
_STD swap(_Rep, _Desired._Rep);
4033
4034
this->_Repptr._Store_and_unlock(_Rep);
0 commit comments