]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | |
2 | // Copyright (C) 2009-2012 Lorenzo Caminiti | |
3 | // Distributed under the Boost Software License, Version 1.0 | |
4 | // (see accompanying file LICENSE_1_0.txt or a copy at | |
5 | // http://www.boost.org/LICENSE_1_0.txt) | |
6 | // Home at http://www.boost.org/libs/utility/identity_type | |
7 | ||
8 | /** @file | |
9 | Wrap type expressions with round parenthesis so they can be passed to macros | |
10 | even if they contain commas. | |
11 | */ | |
12 | ||
13 | #ifndef BOOST_IDENTITY_TYPE_HPP_ | |
14 | #define BOOST_IDENTITY_TYPE_HPP_ | |
15 | ||
16 | #include <boost/type_traits/function_traits.hpp> | |
17 | ||
18 | /** | |
19 | @brief This macro allows to wrap the specified type expression within extra | |
20 | round parenthesis so the type can be passed as a single macro parameter even if | |
21 | it contains commas (not already wrapped within round parenthesis). | |
22 | ||
23 | @Params | |
24 | @Param{parenthesized_type, | |
25 | The type expression to be passed as macro parameter wrapped by a single set | |
26 | of round parenthesis <c>(...)</c>. | |
27 | This type expression can contain an arbitrary number of commas. | |
28 | } | |
29 | @EndParams | |
30 | ||
31 | This macro works on any C++03 compiler (it does not use variadic macros). | |
32 | ||
33 | This macro must be prefixed by <c>typename</c> when used within templates. | |
34 | Note that the compiler will not be able to automatically determine function | |
35 | template parameters when they are wrapped with this macro (these parameters | |
36 | need to be explicitly specified when calling the function template). | |
37 | ||
38 | On some compilers (like GCC), using this macro on abstract types requires to | |
39 | add and remove a reference to the specified type. | |
40 | */ | |
41 | #define BOOST_IDENTITY_TYPE(parenthesized_type) \ | |
42 | /* must NOT prefix this with `::` to work with parenthesized syntax */ \ | |
43 | boost::function_traits< void parenthesized_type >::arg1_type | |
44 | ||
45 | #endif // #include guard | |
46 |