mirror of
https://github.com/boostorg/utility.git
synced 2025-05-09 15:04:00 +00:00
Added LocalFunction and Utility/IdentityType source files.
[SVN r77024]
This commit is contained in:
parent
e763315b55
commit
9a16aaa2b9
45
include/boost/utility/identity_type.hpp
Normal file
45
include/boost/utility/identity_type.hpp
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
// 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 require variadic macros).
|
||||||
|
|
||||||
|
This macro must be prefixed by <c>typename</c> when used within templates.
|
||||||
|
However, 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 an abstract types requires to
|
||||||
|
add and remove a reference to the 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
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user