]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/sp_unique_ptr_test2.cpp
1 // Copyright 2021 Peter Dimov
2 // Distributed under the Boost Software License, Version 1.0.
3 // https://www.boost.org/LICENSE_1_0.txt
5 #include <boost/shared_ptr.hpp>
6 #include <boost/core/lightweight_test.hpp>
7 #include <boost/config.hpp>
8 #include <boost/config/pragma_message.hpp>
12 #if defined( BOOST_NO_CXX11_SMART_PTR )
14 BOOST_PRAGMA_MESSAGE("Skipping test because BOOST_NO_CXX11_SMART_PTR is defined")
17 #elif defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
19 BOOST_PRAGMA_MESSAGE("Skipping test because BOOST_NO_CXX11_RVALUE_REFERENCES is defined")
22 #elif defined(BOOST_MSVC) && BOOST_MSVC < 1700
24 BOOST_PRAGMA_MESSAGE("Skipping test because msvc-10.0 unique_ptr doesn't support move-only deleters")
35 Y(): deleted_( false )
42 BOOST_TEST( deleted_
);
49 Y
& operator=( Y
const & );
62 YD( YD
&& r
): moved_( false )
67 void operator()( Y
* p
) const
69 BOOST_TEST( !moved_
);
78 BOOST_ERROR( "YD::operator()(0) called" );
85 YD
& operator=( YD
const & );
90 BOOST_TEST( Y::instances
== 0 );
93 std::unique_ptr
<Y
, YD
> p( new Y
);
94 BOOST_TEST( Y::instances
== 1 );
96 boost::shared_ptr
<Y
> p2( std::move( p
) );
98 BOOST_TEST( Y::instances
== 1 );
99 BOOST_TEST( p
.get() == 0 );
100 BOOST_TEST( p
.get_deleter().moved_
);
103 BOOST_TEST( Y::instances
== 0 );
107 std::unique_ptr
<Y
, YD
> p( new Y
);
108 BOOST_TEST( Y::instances
== 1 );
110 boost::shared_ptr
<void> p2( std::move( p
) );
112 BOOST_TEST( Y::instances
== 1 );
113 BOOST_TEST( p
.get() == 0 );
114 BOOST_TEST( p
.get_deleter().moved_
);
117 BOOST_TEST( Y::instances
== 0 );
121 std::unique_ptr
<Y
, YD
> p( new Y
);
122 BOOST_TEST( Y::instances
== 1 );
124 boost::shared_ptr
<Y
> p2
;
127 BOOST_TEST( Y::instances
== 1 );
128 BOOST_TEST( p
.get() == 0 );
129 BOOST_TEST( p
.get_deleter().moved_
);
132 BOOST_TEST( Y::instances
== 0 );
136 std::unique_ptr
<Y
, YD
> p( new Y
);
137 BOOST_TEST( Y::instances
== 1 );
139 boost::shared_ptr
<void> p2( new int(0) );
142 BOOST_TEST( Y::instances
== 1 );
143 BOOST_TEST( p
.get() == 0 );
144 BOOST_TEST( p
.get_deleter().moved_
);
147 BOOST_TEST( Y::instances
== 0 );
150 return boost::report_errors();