?? if_else.hpp
字號:
/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman 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)==============================================================================*/#ifndef PHOENIX_OPERATOR_IF_ELSE_HPP#define PHOENIX_OPERATOR_IF_ELSE_HPP#include <boost/mpl/and.hpp>#include <boost/mpl/if.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/type_traits/is_reference.hpp>#include <boost/type_traits/remove_reference.hpp>#include <boost/spirit/home/phoenix/core/composite.hpp>#include <boost/spirit/home/phoenix/core/compose.hpp>#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>namespace boost { namespace phoenix{ BOOST_BINARY_RESULT_OF(true ? x : y, result_of_if_else) struct if_else_op_eval { template < typename Env , typename Cond , typename Then , typename Else > struct result { typedef typename Then::template result<Env>::type then_type; typedef typename Else::template result<Env>::type else_type; typedef typename result_of_if_else<then_type, else_type>::type ite_result; // Note: c ? x : y can return an lvalue! Allow if_else_op_eval // to return an lvalue IFF then_type and else_type are both lvalues // with the same type. typedef typename mpl::if_< mpl::and_< is_same<then_type, else_type> , is_reference<then_type> > , ite_result , typename remove_reference<ite_result>::type >::type type; }; template < typename RT , typename Env , typename Cond , typename Then , typename Else > static RT eval(Env const& env, Cond& cond, Then& then, Else& else_) { return cond.eval(env) ? then.eval(env) : else_.eval(env); } }; template <typename Cond, typename Then, typename Else> inline actor<typename as_composite<if_else_op_eval, Cond, Then, Else>::type> if_else(Cond const& cond, Then const& then, Else const& else_) { return compose<if_else_op_eval>(cond, then, else_); }}}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -