| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
#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.// $Id$// $Date$// $Revision$#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 https://lists.boost.org/Archives/boost/2004/09/71383.phptemplate<      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
 |