File indexing completed on 2025-01-18 09:46:04
0001
0002
0003
0004
0005
0006
0007
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
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
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
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