]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/shared_ptr_rv_pointer_cast_test.cpp
2 // shared_ptr_rv_pointer_cast_test.cpp
4 // Copyright (c) 2016 Chris Glover
6 // Distributed under the Boost Software License, Version 1.0.
7 // See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt
11 #include <boost/shared_ptr.hpp>
12 #include <boost/core/lightweight_test.hpp>
14 #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
36 boost::shared_ptr
<X
> px(new Y
);
38 boost::shared_ptr
<Y
> py1
= boost::static_pointer_cast
<Y
>(px
);
39 boost::shared_ptr
<Y
> py2
= boost::static_pointer_cast
<Y
>(std::move(px
));
41 BOOST_TEST(px
.use_count() == 0);
42 BOOST_TEST(py1
.get() == py2
.get());
43 BOOST_TEST(!(py1
< py2
|| py2
< py1
));
44 BOOST_TEST(py1
.use_count() == 2);
45 BOOST_TEST(py2
.use_count() == 2);
49 boost::shared_ptr
<int const volatile> px(new int);
51 boost::shared_ptr
<int> px2
= boost::const_pointer_cast
<int>(px
);
52 boost::shared_ptr
<int> px3
= boost::const_pointer_cast
<int>(std::move(px
));
54 BOOST_TEST(px
.use_count() == 0);
55 BOOST_TEST(px2
.get() == px3
.get());
56 BOOST_TEST(!(px2
< px3
|| px2
< px3
));
57 BOOST_TEST(px2
.use_count() == 2);
58 BOOST_TEST(px3
.use_count() == 2);
62 boost::shared_ptr
<char> pv(reinterpret_cast<char*>(new Y
));
64 boost::shared_ptr
<Y
> py1
= boost::reinterpret_pointer_cast
<Y
>(pv
);
65 boost::shared_ptr
<Y
> py2
= boost::reinterpret_pointer_cast
<Y
>(std::move(pv
));
67 BOOST_TEST(pv
.use_count() == 0);
68 BOOST_TEST(py1
.get() == py2
.get());
69 BOOST_TEST(!(py1
< py2
|| py2
< py1
));
70 BOOST_TEST(py1
.use_count() == 2);
71 BOOST_TEST(py2
.use_count() == 2);
74 #if !defined( BOOST_NO_RTTI )
76 boost::shared_ptr
<U
> pu(new V
);
78 boost::shared_ptr
<V
> pv1
= boost::dynamic_pointer_cast
<V
>(pu
);
79 boost::shared_ptr
<V
> pv2
= boost::dynamic_pointer_cast
<V
>(std::move(pu
));
81 BOOST_TEST(pu
.use_count() == 0);
82 BOOST_TEST(pv1
.get() == pv2
.get());
83 BOOST_TEST(!(pv1
< pv2
|| pv2
< pv1
));
84 BOOST_TEST(pv1
.use_count() == 2);
85 BOOST_TEST(pv2
.use_count() == 2);
89 boost::shared_ptr
<U
> pu(new V
);
90 boost::shared_ptr
<W
> pw
= boost::dynamic_pointer_cast
<W
>(std::move(pu
));
94 #endif // !defined( BOOST_NO_RTTI )
96 return boost::report_errors();
99 #else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
106 #endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )