2
0
mirror of https://github.com/boostorg/phoenix.git synced 2026-02-13 12:42:11 +00:00

forgot operator details

[SVN r66526]
This commit is contained in:
Thomas Heller
2010-11-12 15:19:44 +00:00
parent 6cf8f3aba6
commit 7e08dd2ffa

View File

@@ -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 <typename Object, typename MemPtr,
PHOENIX_typename_A_void(PHOENIX_MEMBER_LIMIT)
, typename Dummy = void>
struct mem_fun_ptr_gen;
template <typename Object, typename MemPtr>
struct mem_fun_ptr_gen<Object, MemPtr>
: 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, \
<boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp>, \
PHOENIX_ITERATE_RESULT_OF))
#include PHOENIX_ITERATE()
#undef PHOENIX_ITERATE_RESULT_OF
}
template <typename Object, typename MemPtr>
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<Object, MemPtr>::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, \
<boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp>, \
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 <typename Object, typename MemPtr, PHOENIX_typename_A>
struct mem_fun_ptr_gen<Object, MemPtr, PHOENIX_A>
: proto::result_of::make_expr<
tag::mem_fun_ptr
, phoenix_domain
, MemPtr
, Object
, PHOENIX_A>
{};
#elif BOOST_PP_ITERATION_FLAGS() == PHOENIX_ITERATE_OPERATOR
template <PHOENIX_typename_A>
typename result_of::mem_fun_ptr_gen<Object, MemPtr, PHOENIX_A>::type const
operator()(PHOENIX_A_const_ref_a) const
{
return proto::make_expr<
tag::mem_fun_ptr, phoenix_domain>(ptr, obj, PHOENIX_a);
}
template <PHOENIX_typename_A>
typename result_of::mem_fun_ptr_gen<Object, MemPtr, PHOENIX_A>::type const
operator()(PHOENIX_A_ref_a) const
{
return proto::make_expr<
tag::mem_fun_ptr, phoenix_domain>(ptr, obj, PHOENIX_a);
}
#endif
#endif