From: Jonathan Wakely Date: Sat, 13 Dec 2014 00:44:17 +0000 (+0000) Subject: re PR libstdc++/58594 (std::make_shared does not accept const types as parameters) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=93889749df8701ec3b77649898f38e2368555376;p=gcc.git 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a4ab4bfb5d4..9137a985017 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2014-12-13 Jonathan Wakely + + PR libstdc++/58594 + * include/bits/shared_ptr_base.h: Real fix for cv-qualified types. + 2014-12-12 Jonathan Wakely PR libstdc++/64241 diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index 3ef783fa356..ad68c237ee2 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -1106,7 +1106,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template 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::type> __traits; _Deleter __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::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