| 
									
										
										
										
											2012-11-06 14:17:32 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2012 Glen Joseph Fernandes  | 
					
						
							|  |  |  |  * glenfe at live dot com | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Distributed under the Boost Software License,  | 
					
						
							|  |  |  |  * Version 1.0. (See accompanying file LICENSE_1_0.txt  | 
					
						
							|  |  |  |  * or copy at http://boost.org/LICENSE_1_0.txt)
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #include <boost/detail/lightweight_test.hpp>
 | 
					
						
							|  |  |  | #include <boost/smart_ptr/allocate_shared_array.hpp>
 | 
					
						
							|  |  |  | #include <boost/smart_ptr/enable_shared_from_this.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class type  | 
					
						
							|  |  |  |     : public boost::enable_shared_from_this<type> { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     static unsigned int instances; | 
					
						
							|  |  |  |     explicit type() { | 
					
						
							|  |  |  |         instances++; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     ~type() { | 
					
						
							|  |  |  |         instances--; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |     type(const type&); | 
					
						
							|  |  |  |     type& operator=(const type&); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unsigned int type::instances = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main() { | 
					
						
							|  |  |  |     BOOST_TEST(type::instances == 0); | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         boost::shared_ptr<type[]> a1 = boost::allocate_shared<type[]>(std::allocator<type>(), 3); | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             a1[0].shared_from_this(); | 
					
						
							|  |  |  |             BOOST_ERROR("shared_from_this did not throw"); | 
					
						
							| 
									
										
										
										
											2012-11-11 19:14:50 +00:00
										 |  |  |         } catch (...) { | 
					
						
							| 
									
										
										
										
											2012-11-06 14:17:32 +00:00
										 |  |  |             BOOST_TEST(type::instances == 3); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return boost::report_errors(); | 
					
						
							|  |  |  | } |