re PR libstdc++/58594 (std::make_shared does not accept const types as parameters)
PR libstdc++/58594 * include/bits/shared_ptr_base.h: Real fix for cv-qualified types. From-SVN: r218698
This commit is contained in:
parent
80d8f3796d
commit
93889749df
2 changed files with 10 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
|||
2014-12-13 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/58594
|
||||
* include/bits/shared_ptr_base.h: Real fix for cv-qualified types.
|
||||
|
||||
2014-12-12 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/64241
|
||||
|
|
|
@ -1106,7 +1106,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
template<typename _Alloc>
|
||||
struct _Deleter
|
||||
{
|
||||
void operator()(_Tp* __ptr)
|
||||
void operator()(typename _Alloc::value_type* __ptr)
|
||||
{
|
||||
__allocated_ptr<_Alloc> __guard{ _M_alloc, __ptr };
|
||||
allocator_traits<_Alloc>::destroy(_M_alloc, __guard.get());
|
||||
|
@ -1123,14 +1123,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
rebind_traits<typename std::remove_cv<_Tp>::type> __traits;
|
||||
_Deleter<typename __traits::allocator_type> __del = { __a };
|
||||
auto __guard = std::__allocate_guarded(__del._M_alloc);
|
||||
_M_ptr = __guard.get();
|
||||
auto __ptr = __guard.get();
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 2070. allocate_shared should use allocator_traits<A>::construct
|
||||
__traits::construct(__del._M_alloc, _M_ptr,
|
||||
__traits::construct(__del._M_alloc, __ptr,
|
||||
std::forward<_Args>(__args)...);
|
||||
__guard = nullptr;
|
||||
__shared_count<_Lp> __count(_M_ptr, __del, __del._M_alloc);
|
||||
__shared_count<_Lp> __count(__ptr, __del, __del._M_alloc);
|
||||
_M_refcount._M_swap(__count);
|
||||
_M_ptr = __ptr;
|
||||
__enable_shared_from_this_helper(_M_refcount, _M_ptr, _M_ptr);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue