]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/shared_from_raw_test4.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / smart_ptr / test / shared_from_raw_test4.cpp
1 //
2 // shared_from_raw_test4 - based on esft_void_test.cpp
3 //
4 // Copyright 2009, 2014 Peter Dimov
5 //
6 // Distributed under the Boost Software License, Version 1.0.
7 //
8 // See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt
10 //
11
12
13 #include <boost/smart_ptr/enable_shared_from_raw.hpp>
14 #include <boost/shared_ptr.hpp>
15 #include <boost/core/lightweight_test.hpp>
16
17 //
18
19 class X: public boost::enable_shared_from_raw
20 {
21 };
22
23 int main()
24 {
25 boost::shared_ptr< void const volatile > pv( new X );
26 boost::shared_ptr< void > pv2 = boost::const_pointer_cast< void >( pv );
27 boost::shared_ptr< X > px = boost::static_pointer_cast< X >( pv2 );
28
29 try
30 {
31 boost::shared_ptr< X > qx = boost::shared_from_raw( px.get() );
32
33 BOOST_TEST( px == qx );
34 BOOST_TEST( !( px < qx ) && !( qx < px ) );
35 }
36 catch( boost::bad_weak_ptr const& )
37 {
38 BOOST_ERROR( "shared_from_this( px.get() ) failed" );
39 }
40
41 boost::shared_ptr< X const volatile > px2( px );
42
43 try
44 {
45 boost::shared_ptr< X const volatile > qx2 = boost::shared_from_raw( px2.get() );
46
47 BOOST_TEST( px2 == qx2 );
48 BOOST_TEST( !( px2 < qx2 ) && !( qx2 < px2 ) );
49 }
50 catch( boost::bad_weak_ptr const& )
51 {
52 BOOST_ERROR( "shared_from_this( px2.get() ) failed" );
53 }
54
55 return boost::report_errors();
56 }