diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-06 10:30:07 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-06 10:32:57 +0900 |
commit | 71d216b90256936a9638f325af9bc69d720e75de (patch) | |
tree | 9c5f682d341c7c88ad0c8e3d4b262e00b6fb691a /boost/smart_ptr/shared_ptr.hpp | |
parent | 733b5d5ae2c5d625211e2985ac25728ac3f54883 (diff) | |
download | boost-71d216b90256936a9638f325af9bc69d720e75de.tar.gz boost-71d216b90256936a9638f325af9bc69d720e75de.tar.bz2 boost-71d216b90256936a9638f325af9bc69d720e75de.zip |
Imported Upstream version 1.59.0
Change-Id: I2dde00f4eca71df3eea9d251dcaecde18a6c90a5
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/smart_ptr/shared_ptr.hpp')
-rw-r--r-- | boost/smart_ptr/shared_ptr.hpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/boost/smart_ptr/shared_ptr.hpp b/boost/smart_ptr/shared_ptr.hpp index 8be92abb5d..991ca3dad3 100644 --- a/boost/smart_ptr/shared_ptr.hpp +++ b/boost/smart_ptr/shared_ptr.hpp @@ -55,6 +55,13 @@ template<class T> class weak_ptr; template<class T> class enable_shared_from_this; class enable_shared_from_raw; +namespace movelib +{ + + template< class T, class D > class unique_ptr; + +} // namespace movelib + namespace detail { @@ -495,6 +502,17 @@ public: #endif + template< class Y, class D > + shared_ptr( boost::movelib::unique_ptr< Y, D > r ): px( r.get() ), pn() + { + boost::detail::sp_assert_convertible< Y, T >(); + + typename boost::movelib::unique_ptr< Y, D >::pointer tmp = r.get(); + pn = boost::detail::shared_count( r ); + + boost::detail::sp_deleter_construct( this, tmp ); + } + // assignment shared_ptr & operator=( shared_ptr const & r ) BOOST_NOEXCEPT @@ -556,6 +574,27 @@ public: #endif + template<class Y, class D> + shared_ptr & operator=( boost::movelib::unique_ptr<Y, D> r ) + { + // this_type( static_cast< unique_ptr<Y, D> && >( r ) ).swap( *this ); + + boost::detail::sp_assert_convertible< Y, T >(); + + typename boost::movelib::unique_ptr< Y, D >::pointer p = r.get(); + + shared_ptr tmp; + + tmp.px = p; + tmp.pn = boost::detail::shared_count( r ); + + boost::detail::sp_deleter_construct( &tmp, p ); + + tmp.swap( *this ); + + return *this; + } + // Move support #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) |