47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Copyright (C) 2009-2012 Lorenzo Caminiti
							 | 
						||
| 
								 | 
							
								// Distributed under the Boost Software License, Version 1.0
							 | 
						||
| 
								 | 
							
								// (see accompanying file LICENSE_1_0.txt or a copy at
							 | 
						||
| 
								 | 
							
								// http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								// Home at http://www.boost.org/libs/utility/identity_type
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @file
							 | 
						||
| 
								 | 
							
								Wrap type expressions with round parenthesis so they can be passed to macros
							 | 
						||
| 
								 | 
							
								even if they contain commas.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_IDENTITY_TYPE_HPP_
							 | 
						||
| 
								 | 
							
								#define BOOST_IDENTITY_TYPE_HPP_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/type_traits/function_traits.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								@brief This macro allows to wrap the specified type expression within extra
							 | 
						||
| 
								 | 
							
								round parenthesis so the type can be passed as a single macro parameter even if
							 | 
						||
| 
								 | 
							
								it contains commas (not already wrapped within round parenthesis).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Params
							 | 
						||
| 
								 | 
							
								@Param{parenthesized_type,
							 | 
						||
| 
								 | 
							
								The type expression to be passed as macro parameter wrapped by a single set
							 | 
						||
| 
								 | 
							
								of round parenthesis <c>(...)</c>.
							 | 
						||
| 
								 | 
							
								This type expression can contain an arbitrary number of commas.
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								@EndParams
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This macro works on any C++03 compiler (it does not use variadic macros).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This macro must be prefixed by <c>typename</c> when used within templates.
							 | 
						||
| 
								 | 
							
								Note that the compiler will not be able to automatically determine function
							 | 
						||
| 
								 | 
							
								template parameters when they are wrapped with this macro (these parameters
							 | 
						||
| 
								 | 
							
								need to be explicitly specified when calling the function template).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On some compilers (like GCC), using this macro on abstract types requires to
							 | 
						||
| 
								 | 
							
								add and remove a reference to the specified type.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								#define BOOST_IDENTITY_TYPE(parenthesized_type) \
							 | 
						||
| 
								 | 
							
								    /* must NOT prefix this with `::` to work with parenthesized syntax */ \
							 | 
						||
| 
								 | 
							
								    boost::function_traits< void parenthesized_type >::arg1_type
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // #include guard
							 | 
						||
| 
								 | 
							
								
							 |