1 // 2 // sp_nullptr_test.cpp 3 // 4 // Copyright 2012 Peter Dimov 5 // 6 // Distributed under the Boost Software License, Version 1.0. (See 7 // 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/smart_ptr/detail/sp_nullptr_t.hpp> 13 #include <boost/detail/lightweight_test.hpp> 14 #include <cstddef> 15 #include <memory> 16 17 #if !defined( BOOST_NO_CXX11_NULLPTR ) 18 19 struct X 20 { 21 static int instances; 22 XX23 X() 24 { 25 ++instances; 26 } 27 ~XX28 ~X() 29 { 30 --instances; 31 } 32 33 private: 34 35 X( X const & ); 36 X & operator=( X const & ); 37 }; 38 39 int X::instances = 0; 40 f(boost::detail::sp_nullptr_t)41void f( boost::detail::sp_nullptr_t ) 42 { 43 } 44 main()45int main() 46 { 47 { 48 boost::shared_ptr<void> p( nullptr ); 49 50 BOOST_TEST( p.get() == 0 ); 51 BOOST_TEST( p.use_count() == 0 ); 52 53 BOOST_TEST( p == nullptr ); 54 BOOST_TEST( nullptr == p ); 55 BOOST_TEST( !( p != nullptr ) ); 56 BOOST_TEST( !( nullptr != p ) ); 57 } 58 59 { 60 boost::shared_ptr<int> p( nullptr, f ); 61 62 BOOST_TEST( p.get() == 0 ); 63 BOOST_TEST( p.use_count() == 1 ); 64 65 BOOST_TEST( p == nullptr ); 66 BOOST_TEST( nullptr == p ); 67 BOOST_TEST( !( p != nullptr ) ); 68 BOOST_TEST( !( nullptr != p ) ); 69 } 70 71 { 72 boost::shared_ptr<int> p( nullptr, f, std::allocator<int>() ); 73 74 BOOST_TEST( p.get() == 0 ); 75 BOOST_TEST( p.use_count() == 1 ); 76 77 BOOST_TEST( p == nullptr ); 78 BOOST_TEST( nullptr == p ); 79 BOOST_TEST( !( p != nullptr ) ); 80 BOOST_TEST( !( nullptr != p ) ); 81 } 82 83 { 84 boost::shared_ptr<int> p( new int ); 85 86 BOOST_TEST( p.get() != 0 ); 87 BOOST_TEST( p.use_count() == 1 ); 88 89 BOOST_TEST( p != nullptr ); 90 BOOST_TEST( nullptr != p ); 91 BOOST_TEST( !( p == nullptr ) ); 92 BOOST_TEST( !( nullptr == p ) ); 93 94 p = nullptr; 95 96 BOOST_TEST( p.get() == 0 ); 97 BOOST_TEST( p.use_count() == 0 ); 98 99 BOOST_TEST( p == nullptr ); 100 BOOST_TEST( nullptr == p ); 101 BOOST_TEST( !( p != nullptr ) ); 102 BOOST_TEST( !( nullptr != p ) ); 103 } 104 105 { 106 BOOST_TEST( X::instances == 0 ); 107 108 boost::shared_ptr<X> p( new X ); 109 BOOST_TEST( X::instances == 1 ); 110 111 BOOST_TEST( p.get() != 0 ); 112 BOOST_TEST( p.use_count() == 1 ); 113 114 BOOST_TEST( p != nullptr ); 115 BOOST_TEST( nullptr != p ); 116 BOOST_TEST( !( p == nullptr ) ); 117 BOOST_TEST( !( nullptr == p ) ); 118 119 p = nullptr; 120 BOOST_TEST( X::instances == 0 ); 121 122 BOOST_TEST( p.get() == 0 ); 123 BOOST_TEST( p.use_count() == 0 ); 124 125 BOOST_TEST( p == nullptr ); 126 BOOST_TEST( nullptr == p ); 127 BOOST_TEST( !( p != nullptr ) ); 128 BOOST_TEST( !( nullptr != p ) ); 129 } 130 131 return boost::report_errors(); 132 } 133 134 #else 135 main()136int main() 137 { 138 return 0; 139 } 140 141 #endif 142