1 /* 2 Copyright 2017 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/config.hpp> 9 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ 10 !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) 11 #include <boost/core/lightweight_test.hpp> 12 #include <boost/smart_ptr/enable_shared_from_this.hpp> 13 #include <boost/smart_ptr/make_local_shared.hpp> 14 15 class type 16 : public boost::enable_shared_from_this<type> { 17 public: 18 static unsigned instances; 19 type()20 type() { 21 ++instances; 22 } 23 ~type()24 ~type() { 25 --instances; 26 } 27 28 private: 29 type(const type&); 30 type& operator=(const type&); 31 }; 32 33 unsigned type::instances = 0; 34 main()35int main() 36 { 37 BOOST_TEST(type::instances == 0); 38 { 39 boost::local_shared_ptr<type[]> result = 40 boost::make_local_shared<type[]>(3); 41 try { 42 result[0].shared_from_this(); 43 BOOST_ERROR("shared_from_this did not throw"); 44 } catch (...) { 45 BOOST_TEST(type::instances == 3); 46 } 47 } 48 BOOST_TEST(type::instances == 0); 49 { 50 boost::local_shared_ptr<type[3]> result = 51 boost::make_local_shared_noinit<type[3]>(); 52 try { 53 result[0].shared_from_this(); 54 BOOST_ERROR("shared_from_this did not throw"); 55 } catch (...) { 56 BOOST_TEST(type::instances == 3); 57 } 58 } 59 return boost::report_errors(); 60 } 61 #else main()62int main() 63 { 64 return 0; 65 } 66 #endif 67