cast.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 132 行
HPP
132 行
// Copyright Daniel Wallin 2006. Use, modification and distribution is// subject to the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#ifndef BOOST_PARAMETER_CAST_060902_HPP# define BOOST_PARAMETER_CAST_060902_HPP# include <boost/detail/workaround.hpp># if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))# include <boost/type_traits/add_reference.hpp># include <boost/type_traits/remove_const.hpp># endifnamespace boost { namespace parameter { namespace aux {struct use_default_tag {};# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))# define BOOST_PARAMETER_FUNCTION_CAST(value, predicate) value# else// Handles possible implicit casts. Used by preprocessor.hpp to// normalize user input.//// cast<void*>::execute() is identity// cast<void*(X)>::execute() is identity// cast<void(X)>::execute() casts to X//// preprocessor.hpp uses this like this://// #define X(value, predicate)// cast<void predicate>::execute(value)//// X(something, *)// X(something, *(predicate))// X(something, (int))template <class T>struct cast;template <>struct cast<void*>{ static use_default_tag execute(use_default_tag) { return use_default_tag(); } static use_default_tag remove_const(use_default_tag) { return use_default_tag(); } template <class U> static U& execute(U& value) { return value; } template <class U> static U& remove_const(U& x) { return x; }};#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))typedef void* voidstar;template <class T>struct cast<voidstar(T)> : cast<void*>{};#elsetemplate <class T>struct cast<void*(T)> : cast<void*>{};#endiftemplate <class T>struct cast<void(T)>{ typedef typename boost::add_reference< typename boost::remove_const<T>::type >::type reference; static use_default_tag execute(use_default_tag) { return use_default_tag(); } static use_default_tag remove_const(use_default_tag) { return use_default_tag(); } static T execute(T value) { return value; } template <class U> static reference remove_const(U const& x) { return const_cast<reference>(x); }};# define BOOST_PARAMETER_FUNCTION_CAST(value, predicate) \ boost::parameter::aux::cast<void predicate>::remove_const( \ boost::parameter::aux::cast<void predicate>::execute(value) \ )# endif}}} // namespace boost::parameter::aux#endif // BOOST_PARAMETER_CAST_060902_HPP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?