shared_ptr_reinterpret_pointer_cast_test.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #include <boost/shared_ptr.hpp>
  11. #include <boost/detail/lightweight_test.hpp>
  12. struct X
  13. {};
  14. int main()
  15. {
  16. {
  17. boost::shared_ptr<char> pc;
  18. boost::shared_ptr<int> pi = boost::reinterpret_pointer_cast<int>(pc);
  19. BOOST_TEST(pi.get() == 0);
  20. boost::shared_ptr<X> px = boost::reinterpret_pointer_cast<X>(pc);
  21. BOOST_TEST(px.get() == 0);
  22. }
  23. {
  24. boost::shared_ptr<int> pi(new int);
  25. boost::shared_ptr<char> pc = boost::reinterpret_pointer_cast<char>(pi);
  26. boost::shared_ptr<int> pi2 = boost::reinterpret_pointer_cast<int>(pc);
  27. BOOST_TEST(pi.get() == pi2.get());
  28. BOOST_TEST(!(pi < pi2 || pi2 < pi));
  29. BOOST_TEST(pi.use_count() == 3);
  30. BOOST_TEST(pc.use_count() == 3);
  31. BOOST_TEST(pi2.use_count() == 3);
  32. }
  33. {
  34. boost::shared_ptr<X> px(new X);
  35. boost::shared_ptr<char> pc = boost::reinterpret_pointer_cast<char>(px);
  36. boost::shared_ptr<X> px2 = boost::reinterpret_pointer_cast<X>(pc);
  37. BOOST_TEST(px.get() == px2.get());
  38. BOOST_TEST(!(px < px2 || px2 < px));
  39. BOOST_TEST(px.use_count() == 3);
  40. BOOST_TEST(pc.use_count() == 3);
  41. BOOST_TEST(px2.use_count() == 3);
  42. }
  43. return boost::report_errors();
  44. }