if.hpp
来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 136 行
HPP
136 行
#ifndef BOOST_MPL_IF_HPP_INCLUDED#define BOOST_MPL_IF_HPP_INCLUDED// Copyright Aleksey Gurtovoy 2000-2004//// Distributed under 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)//// See http://www.boost.org/libs/mpl for documentation.// $Source: /CVSROOT/CGAL/Packages/Boost/include/boost/mpl/if.hpp,v $// $Date: 2004/11/20 10:39:19 $// $Revision: 1.1.1.2 $#include <boost/mpl/aux_/value_wknd.hpp>#include <boost/mpl/aux_/static_cast.hpp>#include <boost/mpl/aux_/na_spec.hpp>#include <boost/mpl/aux_/lambda_support.hpp>#include <boost/mpl/aux_/config/integral.hpp>#include <boost/mpl/aux_/config/ctps.hpp>#include <boost/mpl/aux_/config/workaround.hpp>namespace boost { namespace mpl {#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)template< bool C , typename T1 , typename T2 >struct if_c{ typedef T1 type;};template< typename T1 , typename T2 >struct if_c<false,T1,T2>{ typedef T2 type;};// agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars// (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959template< typename BOOST_MPL_AUX_NA_PARAM(T1) , typename BOOST_MPL_AUX_NA_PARAM(T2) , typename BOOST_MPL_AUX_NA_PARAM(T3) >struct if_{ private: // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC typedef if_c<#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) BOOST_MPL_AUX_VALUE_WKND(T1)::value#else BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)#endif , T2 , T3 > almost_type_; public: typedef typename almost_type_::type type; BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))};#else// no partial class template specializationnamespace aux {template< bool C >struct if_impl{ template< typename T1, typename T2 > struct result_ { typedef T1 type; };};template<>struct if_impl<false>{ template< typename T1, typename T2 > struct result_ { typedef T2 type; };};} // namespace auxtemplate< bool C_ , typename T1 , typename T2 >struct if_c{ typedef typename aux::if_impl< C_ > ::template result_<T1,T2>::type type;};// (almost) copy & paste in order to save one more // recursively nested template instantiation to usertemplate< typename BOOST_MPL_AUX_NA_PARAM(C_) , typename BOOST_MPL_AUX_NA_PARAM(T1) , typename BOOST_MPL_AUX_NA_PARAM(T2) >struct if_{ enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value }; typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) > ::template result_<T1,T2>::type type; BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))};#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONBOOST_MPL_AUX_NA_SPEC(3, if_)}}#endif // BOOST_MPL_IF_HPP_INCLUDED
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?