diff --git a/include/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp b/include/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp new file mode 100644 index 0000000..143acb1 --- /dev/null +++ b/include/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp @@ -0,0 +1,114 @@ +/*============================================================================== + Copyright (c) 2001-2010 Joel de Guzman + Copyright (c) 2010 Thomas Heller + + 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) +==============================================================================*/ + +#if !PHOENIX_IS_ITERATING + +#ifndef PHOENIX_OPERATOR_MEMBER_DETAIL_MEM_FUN_PTR_GEN_HPP +#define PHOENIX_OPERATOR_MEMBER_DETAIL_MEM_FUN_PTR_GEN_HPP + +namespace boost { namespace phoenix +{ + namespace tag + { + struct mem_fun_ptr {}; + } + + namespace detail { + namespace result_of + { + template + struct mem_fun_ptr_gen; + + template + struct mem_fun_ptr_gen + : proto::result_of::make_expr< + tag::mem_fun_ptr + , phoenix_domain + , MemPtr + , Object> + {}; + +#define PHOENIX_ITERATE_RESULT_OF 1 +#define PHOENIX_ITERATION_PARAMS \ + (4, (1, PHOENIX_MEMBER_LIMIT, \ + , \ + PHOENIX_ITERATE_RESULT_OF)) +#include PHOENIX_ITERATE() +#undef PHOENIX_ITERATE_RESULT_OF + + } + + template + struct mem_fun_ptr_gen + { + mem_fun_ptr_gen(Object const& obj, MemPtr ptr) + : obj(obj) + , ptr(ptr) + {} + + typename result_of::mem_fun_ptr_gen::type const + operator()() const + { + return proto::make_expr< + tag::mem_fun_ptr, phoenix_domain>(ptr, obj); + } + +#define PHOENIX_ITERATE_OPERATOR 2 +#define PHOENIX_ITERATION_PARAMS \ + (4, (1, PHOENIX_MEMBER_LIMIT, \ + , \ + PHOENIX_ITERATE_OPERATOR)) +#include PHOENIX_ITERATE() +#undef PHOENIX_ITERATE_OPERATOR + + Object const& obj; + MemPtr ptr; + + }; + + } +}} + +#endif + +#else + +#if BOOST_PP_ITERATION_FLAGS() == PHOENIX_ITERATE_RESULT_OF + + template + struct mem_fun_ptr_gen + : proto::result_of::make_expr< + tag::mem_fun_ptr + , phoenix_domain + , MemPtr + , Object + , PHOENIX_A> + {}; + +#elif BOOST_PP_ITERATION_FLAGS() == PHOENIX_ITERATE_OPERATOR + + template + typename result_of::mem_fun_ptr_gen::type const + operator()(PHOENIX_A_const_ref_a) const + { + return proto::make_expr< + tag::mem_fun_ptr, phoenix_domain>(ptr, obj, PHOENIX_a); + } + + template + typename result_of::mem_fun_ptr_gen::type const + operator()(PHOENIX_A_ref_a) const + { + return proto::make_expr< + tag::mem_fun_ptr, phoenix_domain>(ptr, obj, PHOENIX_a); + } + +#endif +#endif