$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r55319 - in sandbox/fmhess: boost/generic_ptr libs/generic_ptr/test
From: fmhess_at_[hidden]
Date: 2009-07-31 15:32:09
Author: fmhess
Date: 2009-07-31 15:32:09 EDT (Fri, 31 Jul 2009)
New Revision: 55319
URL: http://svn.boost.org/trac/boost/changeset/55319
Log:
Added overloads of cloning::reset for the custom deleter and 
cloner cases.  Fixed construction of cloning pointer from
pointer to const.
Text files modified: 
   sandbox/fmhess/boost/generic_ptr/cloning.hpp          |    18 ++++++++++++++++--                      
   sandbox/fmhess/libs/generic_ptr/test/cloning_test.cpp |     6 +++++-                                  
   2 files changed, 21 insertions(+), 3 deletions(-)
Modified: sandbox/fmhess/boost/generic_ptr/cloning.hpp
==============================================================================
--- sandbox/fmhess/boost/generic_ptr/cloning.hpp	(original)
+++ sandbox/fmhess/boost/generic_ptr/cloning.hpp	2009-07-31 15:32:09 EDT (Fri, 31 Jul 2009)
@@ -23,6 +23,7 @@
 #include <boost/noncopyable.hpp>
 #include <boost/ptr_container/clone_allocator.hpp>
 #include <boost/scoped_ptr.hpp>
+#include <boost/type_traits/remove_const.hpp>
 #include <boost/utility/swap.hpp>
 
 namespace boost
@@ -69,8 +70,13 @@
         }
         virtual typename rebind<GenericPointer, void>::other get_pointer()
         {
-          //FIXME: remove const from px's value_type
-          return px;
+          return const_pointer_cast
+            <
+              typename remove_const
+              <
+                typename pointer_traits<GenericPointer>::value_type
+              >::type
+            >(px);
         }
         virtual clone_factory_pdc_impl* make_clone()
         {
@@ -338,6 +344,14 @@
       {
         cloning(p).swap(*this);
       }
+      template<typename U, typename D> void reset(U p, D d)
+      {
+        cloning(p, d).swap(*this);
+      }
+      template<typename U, typename D, typename C> void reset(U p, D d, C c)
+      {
+        cloning(p, d, c).swap(*this);
+      }
 
       pointer get() const {return px;}
 
Modified: sandbox/fmhess/libs/generic_ptr/test/cloning_test.cpp
==============================================================================
--- sandbox/fmhess/libs/generic_ptr/test/cloning_test.cpp	(original)
+++ sandbox/fmhess/libs/generic_ptr/test/cloning_test.cpp	2009-07-31 15:32:09 EDT (Fri, 31 Jul 2009)
@@ -48,12 +48,16 @@
   boost::generic_ptr::cloning<X*> cp2(cp);
   BOOST_TEST(X::instances == 2);
   BOOST_TEST(cp != cp2);
-  boost::generic_ptr::cloning<X*> cp3;
+  boost::generic_ptr::cloning<const X*> cp3;
   BOOST_TEST(X::instances == 2);
   cp3 = cp2;
   BOOST_TEST(X::instances == 3);
   BOOST_TEST(cp3->num_instances() == X::instances);
   BOOST_TEST(cp2 != cp3);
+
+  const X* p_to_const = new X();
+  cp3.reset(p_to_const);
+  BOOST_TEST(X::instances == 3);
 }
 
 void move_test()