]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/pointer_cast_test.cpp
2 // pointer_cast_test.cpp - a test for boost/pointer_cast.hpp
4 // Copyright (c) 2005 Ion Gaztanaga
5 // Copyright (c) 2005 Peter Dimov
7 // Distributed under the Boost Software License, Version 1.0. (See
8 // accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
12 #include <boost/config.hpp>
14 #include <boost/pointer_cast.hpp>
16 #include <boost/shared_ptr.hpp>
17 #include <boost/scoped_ptr.hpp>
18 #include <boost/get_pointer.hpp>
20 #include <boost/detail/lightweight_test.hpp>
25 // Let's create these inheritance relationship:
50 : public base
, public base2
61 // And now some simple check functions
63 #if !defined( BOOST_NO_RTTI )
65 template <class BasePtr
>
66 bool check_dynamic_pointer_cast(const BasePtr
&ptr
)
68 //Check that dynamic_pointer_cast versus dynamic_cast
70 //Correct cast with dynamic_pointer_cast
71 boost::get_pointer(boost::dynamic_pointer_cast
<derived
>(ptr
)) ==
72 //Correct cast with dynamic_cast
73 dynamic_cast<derived
*>(boost::get_pointer(ptr
))
75 //Incorrect cast with dynamic_pointer_cast
76 boost::get_pointer(boost::dynamic_pointer_cast
<derived_derived
>(ptr
)) ==
77 //Incorrect cast with dynamic_cast
78 dynamic_cast<derived_derived
*>(boost::get_pointer(ptr
));
83 template <class BasePtr
>
84 bool check_static_pointer_cast(const BasePtr
&ptr
)
87 //Cast base -> derived -> base2 using static_pointer_cast
89 boost::static_pointer_cast
<base2
>(
90 boost::static_pointer_cast
<derived
>(ptr
))) ==
91 //Now the same with static_cast
92 static_cast<base2
*>(static_cast<derived
*>(boost::get_pointer(ptr
)));
95 template <class BasePtr
>
96 bool check_const_pointer_cast(const BasePtr
&ptr
)
99 //Unconst and const again using const_pointer_cast
101 boost::const_pointer_cast
<const base
>
102 (boost::const_pointer_cast
<base
>(ptr
))) ==
103 //Now the same with const_cast
104 const_cast<const base
*>(const_cast<base
*>(boost::get_pointer(ptr
)));
107 template <class BasePtr
>
108 void check_all_casts(const BasePtr
&ptr
)
110 #if !defined( BOOST_NO_RTTI )
111 BOOST_TEST( check_dynamic_pointer_cast( ptr
) );
113 BOOST_TEST( check_static_pointer_cast( ptr
) );
114 BOOST_TEST( check_const_pointer_cast( ptr
) );
121 boost::shared_ptr
<base
> boost_shared(new derived
);
122 base
*plain
= boost_shared
.get();
124 check_all_casts(boost_shared
);
125 check_all_casts(plain
);
127 return boost::report_errors();