1 // 2 // get_local_deleter_array_test2.cpp 3 // 4 // Copyright 2002, 2011, 2017 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/smart_ptr/local_shared_ptr.hpp> 12 #include <boost/core/lightweight_test.hpp> 13 14 struct deleter 15 { 16 int data; 17 deleterdeleter18 deleter(): data(0) 19 { 20 } 21 operator ()deleter22 void operator()(void *) 23 { 24 BOOST_TEST(data == 17041); 25 } 26 }; 27 28 struct deleter2 29 { 30 }; 31 32 struct X 33 { 34 }; 35 main()36int main() 37 { 38 { 39 boost::local_shared_ptr<X[]> p; 40 41 BOOST_TEST(boost::get_deleter<void>(p) == 0); 42 BOOST_TEST(boost::get_deleter<void const>(p) == 0); 43 BOOST_TEST(boost::get_deleter<int>(p) == 0); 44 BOOST_TEST(boost::get_deleter<int const>(p) == 0); 45 BOOST_TEST(boost::get_deleter<X>(p) == 0); 46 BOOST_TEST(boost::get_deleter<X const>(p) == 0); 47 BOOST_TEST(boost::get_deleter<deleter>(p) == 0); 48 BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); 49 BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); 50 BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); 51 } 52 53 { 54 boost::local_shared_ptr<X[1]> p; 55 56 BOOST_TEST(boost::get_deleter<void>(p) == 0); 57 BOOST_TEST(boost::get_deleter<void const>(p) == 0); 58 BOOST_TEST(boost::get_deleter<int>(p) == 0); 59 BOOST_TEST(boost::get_deleter<int const>(p) == 0); 60 BOOST_TEST(boost::get_deleter<X>(p) == 0); 61 BOOST_TEST(boost::get_deleter<X const>(p) == 0); 62 BOOST_TEST(boost::get_deleter<deleter>(p) == 0); 63 BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); 64 BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); 65 BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); 66 } 67 68 { 69 boost::local_shared_ptr<X[]> p(new X[1]); 70 71 BOOST_TEST(boost::get_deleter<void>(p) == 0); 72 BOOST_TEST(boost::get_deleter<void const>(p) == 0); 73 BOOST_TEST(boost::get_deleter<int>(p) == 0); 74 BOOST_TEST(boost::get_deleter<int const>(p) == 0); 75 BOOST_TEST(boost::get_deleter<X>(p) == 0); 76 BOOST_TEST(boost::get_deleter<X const>(p) == 0); 77 BOOST_TEST(boost::get_deleter<deleter>(p) == 0); 78 BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); 79 BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); 80 BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); 81 } 82 83 { 84 boost::local_shared_ptr<X[1]> p(new X[1]); 85 86 BOOST_TEST(boost::get_deleter<void>(p) == 0); 87 BOOST_TEST(boost::get_deleter<void const>(p) == 0); 88 BOOST_TEST(boost::get_deleter<int>(p) == 0); 89 BOOST_TEST(boost::get_deleter<int const>(p) == 0); 90 BOOST_TEST(boost::get_deleter<X>(p) == 0); 91 BOOST_TEST(boost::get_deleter<X const>(p) == 0); 92 BOOST_TEST(boost::get_deleter<deleter>(p) == 0); 93 BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); 94 BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); 95 BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); 96 } 97 98 { 99 X x[1]; 100 boost::local_shared_ptr<X[]> p(x, deleter()); 101 102 BOOST_TEST(boost::get_deleter<void>(p) == 0); 103 BOOST_TEST(boost::get_deleter<void const>(p) == 0); 104 BOOST_TEST(boost::get_deleter<int>(p) == 0); 105 BOOST_TEST(boost::get_deleter<int const>(p) == 0); 106 BOOST_TEST(boost::get_deleter<X>(p) == 0); 107 BOOST_TEST(boost::get_deleter<X const>(p) == 0); 108 BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); 109 BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); 110 111 deleter * q = boost::get_deleter<deleter>(p); 112 113 BOOST_TEST(q != 0); 114 BOOST_TEST(q->data == 0); 115 116 q->data = 17041; 117 118 deleter const * r = boost::get_deleter<deleter const>(p); 119 120 BOOST_TEST(r == q); 121 BOOST_TEST(r->data == 17041); 122 } 123 124 { 125 X x[1]; 126 boost::local_shared_ptr<X[1]> p(x, deleter()); 127 128 BOOST_TEST(boost::get_deleter<void>(p) == 0); 129 BOOST_TEST(boost::get_deleter<void const>(p) == 0); 130 BOOST_TEST(boost::get_deleter<int>(p) == 0); 131 BOOST_TEST(boost::get_deleter<int const>(p) == 0); 132 BOOST_TEST(boost::get_deleter<X>(p) == 0); 133 BOOST_TEST(boost::get_deleter<X const>(p) == 0); 134 BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); 135 BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); 136 137 deleter * q = boost::get_deleter<deleter>(p); 138 139 BOOST_TEST(q != 0); 140 BOOST_TEST(q->data == 0); 141 142 q->data = 17041; 143 144 deleter const * r = boost::get_deleter<deleter const>(p); 145 146 BOOST_TEST(r == q); 147 BOOST_TEST(r->data == 17041); 148 } 149 150 return boost::report_errors(); 151 } 152