| 
									
										
										
										
											2002-04-10 03:31:18 +00:00
										 |  |  | // Copyright (C) 2002 Brad King (brad.king@kitware.com) 
 | 
					
						
							|  |  |  | //                    Doug Gregor (gregod@cs.rpi.edu)
 | 
					
						
							| 
									
										
										
										
											2002-04-13 13:19:57 +00:00
										 |  |  | //                    Peter Dimov
 | 
					
						
							| 
									
										
										
										
											2002-04-10 03:31:18 +00:00
										 |  |  | //
 | 
					
						
							|  |  |  | // Permission to copy, use, sell and distribute this software is granted
 | 
					
						
							|  |  |  | // provided this copyright notice appears in all copies.
 | 
					
						
							|  |  |  | // Permission to modify the code and to distribute modified code is granted
 | 
					
						
							|  |  |  | // provided this copyright notice appears in all copies, and a notice
 | 
					
						
							|  |  |  | // that the code was modified is included with the copyright notice.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This software is provided "as is" without express or implied warranty,
 | 
					
						
							|  |  |  | // and with no claim as to its suitability for any purpose.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // For more information, see http://www.boost.org
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef BOOST_UTILITY_ADDRESSOF_HPP
 | 
					
						
							| 
									
										
										
										
											2003-01-08 17:21:10 +00:00
										 |  |  | # define BOOST_UTILITY_ADDRESSOF_HPP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # include <boost/config.hpp>
 | 
					
						
							|  |  |  | # include <boost/detail/workaround.hpp>
 | 
					
						
							|  |  |  | # if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
 | 
					
						
							|  |  |  | #  include <boost/type_traits/add_pointer.hpp>
 | 
					
						
							|  |  |  | # endif
 | 
					
						
							| 
									
										
										
										
											2002-04-10 03:31:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace boost { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-13 13:19:57 +00:00
										 |  |  | // Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-08 17:21:10 +00:00
										 |  |  | // VC7 strips const from nested classes unless we add indirection here
 | 
					
						
							|  |  |  | # if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
 | 
					
						
							|  |  |  | template <typename T> typename add_pointer<T>::type | 
					
						
							|  |  |  | # else
 | 
					
						
							|  |  |  | template <typename T> T* | 
					
						
							|  |  |  | # endif
 | 
					
						
							|  |  |  | addressof(T& v) | 
					
						
							| 
									
										
										
										
											2002-04-10 03:31:18 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-04-10 04:00:22 +00:00
										 |  |  |   return reinterpret_cast<T*>( | 
					
						
							| 
									
										
										
										
											2002-04-13 13:19:57 +00:00
										 |  |  |        &const_cast<char&>(reinterpret_cast<const volatile char &>(v))); | 
					
						
							| 
									
										
										
										
											2002-04-10 03:31:18 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // BOOST_UTILITY_ADDRESSOF_HPP
 |