]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/weak_ptr_alias_move_test.cpp
2 // weak_ptr_alias_move_test.cpp
4 // Copyright 2007, 2019 Peter Dimov
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
11 #include <boost/core/lightweight_test.hpp>
12 #include <boost/weak_ptr.hpp>
13 #include <boost/shared_ptr.hpp>
14 #include <boost/config.hpp>
18 #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
26 explicit X( int v
): v_( v
)
36 template<class P1
, class P2
> bool share_ownership( P1
const& p1
, P2
const& p2
)
38 return !p1
.owner_before( p2
) && !p2
.owner_before( p1
);
44 boost::shared_ptr
<float> p( new float );
45 boost::weak_ptr
<float> p2( p
);
48 boost::weak_ptr
<int const volatile> p3( std::move( p2
), &m2
);
50 BOOST_TEST( p3
.use_count() == p
.use_count() );
51 BOOST_TEST( share_ownership( p
, p3
) );
52 BOOST_TEST( p3
.lock().get() == &m2
);
54 BOOST_TEST( p2
.empty() );
58 boost::shared_ptr
<incomplete
> p
;
59 boost::weak_ptr
<incomplete
> p2( p
);
62 boost::weak_ptr
<int const volatile> p3( std::move( p2
), &m2
);
64 BOOST_TEST( p3
.use_count() == p
.use_count() );
65 BOOST_TEST( share_ownership( p
, p3
) );
66 BOOST_TEST( p3
.lock().get() == 0 );
68 BOOST_TEST( p2
.empty() );
72 boost::shared_ptr
<X
> p( new X( 5 ) );
73 boost::weak_ptr
<X
> p2( p
);
75 boost::weak_ptr
<int const volatile> p3( std::move( p2
), &p2
.lock()->v_
);
77 BOOST_TEST( p3
.use_count() == p
.use_count() );
78 BOOST_TEST( share_ownership( p
, p3
) );
79 BOOST_TEST( p3
.lock().get() == &p
->v_
);
81 BOOST_TEST( p2
.empty() );
84 BOOST_TEST( p3
.expired() );
87 return boost::report_errors();
90 #else // defined( BOOST_NO_CXX11_RVALUE_REFERENCES )