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/detail/lightweight_test.hpp> 13 14 struct X 15 {}; 16 main()17int main() 18 { 19 { 20 boost::shared_ptr<char> pc; 21 22 boost::shared_ptr<int> pi = boost::reinterpret_pointer_cast<int>(pc); 23 BOOST_TEST(pi.get() == 0); 24 25 boost::shared_ptr<X> px = boost::reinterpret_pointer_cast<X>(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>(pi); 32 33 boost::shared_ptr<int> pi2 = boost::reinterpret_pointer_cast<int>(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>(px); 44 45 boost::shared_ptr<X> px2 = boost::reinterpret_pointer_cast<X>(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