Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:46:04

0001 /*==============================================================================
0002     Copyright (c) 2005-2010 Joel de Guzman
0003     Copyright (c) 2010 Thomas Heller
0004     Copyright (c) 2016 Kohei Takahashi
0005 
0006     Distributed under the Boost Software License, Version 1.0. (See accompanying
0007     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0008 ==============================================================================*/
0009 
0010 #ifndef BOOST_PHOENIX_OPERATOR_MEMBER_HPP
0011 #define BOOST_PHOENIX_OPERATOR_MEMBER_HPP
0012 
0013 #include <boost/phoenix/core/limits.hpp>
0014 #include <boost/get_pointer.hpp>
0015 #include <boost/phoenix/core/domain.hpp>
0016 #include <boost/phoenix/core/meta_grammar.hpp>
0017 #include <boost/phoenix/core/call.hpp>
0018 #include <boost/phoenix/core/expression.hpp>
0019 #include <boost/type_traits/remove_reference.hpp>
0020 #include <boost/type_traits/is_member_function_pointer.hpp>
0021 #include <boost/proto/operators.hpp>
0022 #include <boost/phoenix/support/iterate.hpp>
0023 
0024 #ifdef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION
0025 #   include <boost/phoenix/operator/detail/cpp03/mem_fun_ptr_expr.hpp>
0026 #else
0027 BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG(
0028     (boost)(phoenix)(mem_fun_ptr)
0029   , (meta_grammar)(meta_grammar)
0030   , _
0031 )
0032 #endif
0033 
0034 #include <boost/phoenix/operator/detail/define_operator.hpp>
0035 
0036 namespace boost { namespace phoenix
0037 {
0038 #if defined(BOOST_PHOENIX_NO_VARIADIC_OPERATOR)
0039     #include <boost/phoenix/operator/detail/cpp03/mem_fun_ptr_gen.hpp>
0040 #else
0041     // TODO
0042 #endif
0043 
0044     BOOST_PHOENIX_BINARY_OPERATORS((mem_ptr))
0045 
0046     template<>
0047     struct phoenix_generator::case_<proto::tag::mem_ptr>
0048       : proto::or_<
0049             proto::when<
0050                 proto::and_<
0051                     proto::mem_ptr<meta_grammar, proto::terminal<proto::_> >
0052                   , proto::if_<is_member_function_pointer<boost::remove_reference<proto::call<proto::_value(proto::_right)> > >()>
0053                 >
0054               , proto::call<detail::make_mem_fun_ptr_gen(proto::_left, proto::call<proto::_value(proto::_right)>)>
0055             >
0056           , proto::otherwise<
0057                 proto::call<proto::pod_generator<actor>(proto::_)>
0058             >
0059         >
0060     {};
0061 
0062     namespace result_of
0063     {
0064         template <
0065             typename Context
0066           , BOOST_PHOENIX_typename_A_void(BOOST_PHOENIX_LIMIT)
0067           , typename Dummy = void
0068         >
0069         struct mem_fun_ptr_eval;
0070 
0071 #if defined(BOOST_PHOENIX_NO_VARIADIC_OPERATOR)
0072         #include <boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval_result_of.hpp>
0073 #else
0074     // TODO
0075 #endif
0076     }
0077 
0078     struct mem_fun_ptr_eval
0079     {
0080         template<typename Sig>
0081         struct result;
0082 
0083 #if defined(BOOST_PHOENIX_NO_VARIADIC_OPERATOR)
0084         #include <boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval.hpp>
0085 #else
0086     // TODO
0087 #endif
0088     };
0089 
0090     template <typename Dummy>
0091     struct default_actions::when<rule::mem_fun_ptr, Dummy>
0092         : call<mem_fun_ptr_eval>
0093     {};
0094 }}
0095 
0096 #include <boost/phoenix/operator/detail/undef_operator.hpp>
0097 
0098 #endif