1 | // |
---|---|
2 | // shared_pointer_reinterpret_pointer_cast_test.cpp |
3 | // |
4 | // Copyright (c) 2016 Chris Glover |
5 | // |
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 |
9 | // |
10 | |
11 | #include <boost/shared_ptr.hpp> |
12 | #include <boost/core/lightweight_test.hpp> |
13 | |
14 | struct X |
15 | {}; |
16 | |
17 | int main() |
18 | { |
19 | { |
20 | boost::shared_ptr<char> pc; |
21 | |
22 | boost::shared_ptr<int> pi = boost::reinterpret_pointer_cast<int>(r: pc); |
23 | BOOST_TEST(pi.get() == 0); |
24 | |
25 | boost::shared_ptr<X> px = boost::reinterpret_pointer_cast<X>(r: pc); |
26 | BOOST_TEST(px.get() == 0); |
27 | } |
28 | |
29 | { |
30 | boost::shared_ptr<int> pi(new int); |
31 | boost::shared_ptr<char> pc = boost::reinterpret_pointer_cast<char>(r: pi); |
32 | |
33 | boost::shared_ptr<int> pi2 = boost::reinterpret_pointer_cast<int>(r: pc); |
34 | BOOST_TEST(pi.get() == pi2.get()); |
35 | BOOST_TEST(!(pi < pi2 || pi2 < pi)); |
36 | BOOST_TEST(pi.use_count() == 3); |
37 | BOOST_TEST(pc.use_count() == 3); |
38 | BOOST_TEST(pi2.use_count() == 3); |
39 | } |
40 | |
41 | { |
42 | boost::shared_ptr<X> px(new X); |
43 | boost::shared_ptr<char> pc = boost::reinterpret_pointer_cast<char>(r: px); |
44 | |
45 | boost::shared_ptr<X> px2 = boost::reinterpret_pointer_cast<X>(r: pc); |
46 | BOOST_TEST(px.get() == px2.get()); |
47 | BOOST_TEST(!(px < px2 || px2 < px)); |
48 | BOOST_TEST(px.use_count() == 3); |
49 | BOOST_TEST(pc.use_count() == 3); |
50 | BOOST_TEST(px2.use_count() == 3); |
51 | } |
52 | |
53 | return boost::report_errors(); |
54 | } |
55 | |
56 |