diff --git a/include/boost/shared_ptr.hpp b/include/boost/shared_ptr.hpp index b6bf44c..b8072ba 100644 --- a/include/boost/shared_ptr.hpp +++ b/include/boost/shared_ptr.hpp @@ -306,6 +306,38 @@ public: #endif // BOOST_NO_AUTO_PTR +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + shared_ptr( shared_ptr && r ): px( r.px ), pn() // never throws + { + pn.swap( r.pn ); + } + + template + shared_ptr( shared_ptr && r ): px( r.px ), pn() // never throws + { + pn.swap( r.pn ); + } + + shared_ptr & operator=( shared_ptr && r ) // never throws + { + px = r.px; + pn.swap( r.pn ); + return *this; + } + + template + shared_ptr & operator=( shared_ptr && r ) // never throws + { + px = r.px; + pn.swap( r.pn ); + return *this; + } + +#endif + void reset() // never throws in 1.30+ { this_type().swap(*this);