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
 | |
| 
 | 
