| 
									
										
										
										
											2007-07-04 16:35:44 +00:00
										 |  |  | //
 | 
					
						
							|  |  |  | //  sp_unary_addr_test.cpp
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Copyright (c) 2007 Peter Dimov
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Distributed under the Boost Software License, Version 1.0. (See
 | 
					
						
							|  |  |  | // accompanying file LICENSE_1_0.txt or copy at
 | 
					
						
							|  |  |  | // http://www.boost.org/LICENSE_1_0.txt)
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/shared_ptr.hpp>
 | 
					
						
							|  |  |  | #include <boost/detail/lightweight_test.hpp>
 | 
					
						
							|  |  |  | #include <memory>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct deleter | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void operator& (); | 
					
						
							|  |  |  |     void operator& () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     int data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     deleter(): data( 17041 ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void operator()( void * ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct X | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     X x; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         boost::shared_ptr<X> p( &x, deleter() ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         deleter * q = boost::get_deleter<deleter>( p ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         BOOST_TEST( q != 0 ); | 
					
						
							|  |  |  |         BOOST_TEST( q != 0 && q->data == 17041 ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-03 19:29:01 +00:00
										 |  |  | #if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-04 16:35:44 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |         boost::shared_ptr<X> p( &x, deleter(), std::allocator<X>() ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         deleter * q = boost::get_deleter<deleter>( p ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         BOOST_TEST( q != 0 ); | 
					
						
							|  |  |  |         BOOST_TEST( q != 0 && q->data == 17041 ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-03 19:29:01 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-04 16:35:44 +00:00
										 |  |  |     return boost::report_errors(); | 
					
						
							|  |  |  | } |