http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55123



--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-29 
18:23:58 UTC ---

Actually the fix is trivial, we never need allocator<_Tp> , so can just ensure

we never instantiate allocator<_Tp>, then it doesn't matter if _Tp is const.





--- bits/shared_ptr_base.h.orig 2012-10-29 18:22:44.904507722 +0000

+++ bits/shared_ptr_base.h      2012-10-29 18:22:46.654191961 +0000

@@ -622,7 +622,7 @@

        _S_create_from_up(std::unique_ptr<_Tp, _Del>&& __r,

          typename std::enable_if<!std::is_reference<_Del>::value>::type* = 0)

        {

-         return new _Sp_counted_deleter<_Tp*, _Del, std::allocator<_Tp>,

+         return new _Sp_counted_deleter<_Tp*, _Del, std::allocator<void>,

            _Lp>(__r.get(), __r.get_deleter());

        }



@@ -633,7 +633,7 @@

        {

          typedef typename std::remove_reference<_Del>::type _Del1;

          typedef std::reference_wrapper<_Del1> _Del2;

-         return new _Sp_counted_deleter<_Tp*, _Del2, std::allocator<_Tp>,

+         return new _Sp_counted_deleter<_Tp*, _Del2, std::allocator<void>,

            _Lp>(__r.get(), std::ref(__r.get_deleter()));

        }

Reply via email to