1 /* 2 Copyright 2012-2015 Glen Joseph Fernandes 3 (glenjofe@gmail.com) 4 5 Distributed under the Boost Software License, Version 1.0. 6 (http://www.boost.org/LICENSE_1_0.txt) 7 */ 8 #include <boost/core/lightweight_test.hpp> 9 #include <boost/smart_ptr/make_shared.hpp> 10 11 class type { 12 public: 13 static unsigned instances; 14 type()15 type() { 16 if (instances == 5) { 17 throw true; 18 } 19 ++instances; 20 } 21 ~type()22 ~type() { 23 --instances; 24 } 25 26 private: 27 type(const type&); 28 type& operator=(const type&); 29 }; 30 31 unsigned type::instances = 0; 32 main()33int main() 34 { 35 try { 36 boost::make_shared<type[]>(6); 37 BOOST_ERROR("make_shared did not throw"); 38 } catch (...) { 39 BOOST_TEST(type::instances == 0); 40 } 41 try { 42 boost::make_shared<type[][2]>(3); 43 BOOST_ERROR("make_shared did not throw"); 44 } catch (...) { 45 BOOST_TEST(type::instances == 0); 46 } 47 try { 48 boost::make_shared<type[6]>(); 49 BOOST_ERROR("make_shared did not throw"); 50 } catch (...) { 51 BOOST_TEST(type::instances == 0); 52 } 53 try { 54 boost::make_shared<type[3][2]>(); 55 BOOST_ERROR("make_shared did not throw"); 56 } catch (...) { 57 BOOST_TEST(type::instances == 0); 58 } 59 try { 60 boost::make_shared_noinit<type[]>(6); 61 BOOST_ERROR("make_shared_noinit did not throw"); 62 } catch (...) { 63 BOOST_TEST(type::instances == 0); 64 } 65 try { 66 boost::make_shared_noinit<type[][2]>(3); 67 BOOST_ERROR("make_shared_noinit did not throw"); 68 } catch (...) { 69 BOOST_TEST(type::instances == 0); 70 } 71 try { 72 boost::make_shared_noinit<type[6]>(); 73 BOOST_ERROR("make_shared_noinit did not throw"); 74 } catch (...) { 75 BOOST_TEST(type::instances == 0); 76 } 77 try { 78 boost::make_shared_noinit<type[3][2]>(); 79 BOOST_ERROR("make_shared_noinit did not throw"); 80 } catch (...) { 81 BOOST_TEST(type::instances == 0); 82 } 83 return boost::report_errors(); 84 } 85