overload_rep(R(*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), Policies*)
            : m_const(false/*is_indirect_const<T>::value*/)
		{
			m_params_.reserve(BOOST_PP_ITERATION());
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_PARAM, _)
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POLICY_DECL, 1)
			m_arity = 0 BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_ARITY, 0);
		}
		overload_rep(R(T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)) const, Policies*)
            : m_const(true)
		{
			m_params_.reserve(BOOST_PP_ITERATION());
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_PARAM, _)
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POLICY_DECL, 2)
			m_arity = 1 BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_ARITY, 0);
		}
		overload_rep(R(T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), Policies*)
			: m_pointer_offset(0)
			, m_num_args(BOOST_PP_ITERATION())
			, m_const(false)
		{
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_PARAM, _)
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POLICY_DECL, _)
			m_arity = 0 BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_ARITY, 0);
		}
    class BOOST_PP_CAT(base_result_action, N)
      : public action<
            Component, Result,
            BOOST_PP_CAT(hpx::util::tuple, N)<BOOST_PP_REPEAT(N, HPX_REMOVE_QUALIFIERS, _)>,
            Derived>
    {
    public:
        typedef Result result_type;
        typedef BOOST_PP_CAT(hpx::util::tuple, N)<
            BOOST_PP_REPEAT(N, HPX_REMOVE_QUALIFIERS, _)> arguments_type;
        typedef action<Component, result_type, arguments_type, Derived>
            base_type;

    protected:
result_type operator()(jvb::environment e BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, a)) const
{
  e.raw()->CallStaticVoidMethod(cls, id
                                BOOST_PP_REPEAT(BOOST_PP_ITERATION()
                                                , JVB_TRAILING_UNWRAP, a));
  error::throw_exception(e);
}
Beispiel #6
0
	inline void get_signature_impl(const constructor<BOOST_PP_ENUM_PARAMS(LUABIND_MAX_ARITY, A)>*, lua_State* L, string_class& s)
	{
		s += "(";
		type_name_unless_void<A0>::apply(s, L, true);
		BOOST_PP_REPEAT(BOOST_PP_DEC(LUABIND_MAX_ARITY), LUABIND_ADD_LUA_TYPE_NAME, _)
		s += ")";
	}
Beispiel #7
0
// MV, R2k の template
void NAME()
{
	double* b = bb[id];
	// load_odd_a
	for(int i=id*BL; i<n; i+=nth*BL){
		int j = 0;
		int isz = n -i;
		if(isz >= BL){
			// load U_[x,u,v], w
			for(; j < i; j+= 2*RJ){
				//BOOST_PP_REPEAT(BL, CNV_MOVE_A2B, ignore);
				//b += RJ*BL;
				//load_even_a_*
				// mvr2k for odd_a
				// store odd_a
				//load_odd_a_*
				// mvr2k for even_a
				// store_even_a
			}
			if(i-j==RJ){
				// mvr2k for odd_a
				// store_odd_a
				// load_odd_a !
			}
#if TILE_SCHEME != 0
			else {
				//
			}
#endif
			// diagonal block
#if TILE_SCHEME == 0
			BOOST_PP_REPEAT(DIV(BL,RL), DIAGONAL_KERNEL, ignore);
#else
			// very complicated...
#endif

		}
		else {
			for(; j+RJ < i; j+= RJ){
				BOOST_PP_REPEAT(BL, CNV_MOVE_A2B_CHECK, ignore);
				b += RJ*BL;
			}
		}
	}
}
Beispiel #8
0
    class BOOST_PP_CAT(plain_base_result_action, N)
      : public action<
            components::server::plain_function<Derived>,
            BOOST_PP_CAT(function_result_action_arg, N),
            Result,
            BOOST_PP_CAT(hpx::util::tuple, N)<BOOST_PP_REPEAT(N, HPX_REMOVE_QUALIFIERS, _)>,
            Derived>
    {
    public:
        typedef Result result_type;
        typedef BOOST_PP_CAT(hpx::util::tuple, N)<
            BOOST_PP_REPEAT(N, HPX_REMOVE_QUALIFIERS, _)> arguments_type;
        typedef action<
            components::server::plain_function<Derived>,
            BOOST_PP_CAT(function_result_action_arg, N), result_type,
            arguments_type, Derived> base_type;

    protected:
result_type operator()(environment e BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, a)) const
{
  jobject r 
    = e.raw()->CallObjectMethod(obj, id
                                BOOST_PP_REPEAT(BOOST_PP_ITERATION()
                                                , JVB_TRAILING_UNWRAP, a));
  if(r == 0) error::throw_exception(e);
  return result_type(static_cast<jstring>(static_cast<void*>(r)));
}
Beispiel #10
0
	inline void get_member_signature_impl(T(*f)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), lua_State* L, string_class& s)
	{
		s += "(";
#if BOOST_PP_ITERATION() > 0
		s += name_of_type(LUABIND_DECORATE_TYPE(A0), L, 0L);
		BOOST_PP_REPEAT(BOOST_PP_DEC(BOOST_PP_ITERATION()), LUABIND_ADD_LUA_TYPE_NAME, _)
#endif
		s += ")";
	}
Beispiel #11
0
            BOOST_FORCEINLINE
            void execute(boost::mpl::true_)
            {
                boost::fusion::invoke(func_, futures_);

                BOOST_PP_REPEAT(N, HPX_LCOS_LOCAL_DATAFLOW_FRAME_RESET_FUTURES, _)

                this->set_data(util::unused_type());
            }
result_type operator()(environment e BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, a)) const
{
  jlong r 
    = e.raw()->CallLongMethod(obj, id
                               BOOST_PP_REPEAT(BOOST_PP_ITERATION()
                                               , JVB_TRAILING_UNWRAP, a));
  error::throw_exception(e);
  return r;
}
int main(int argc, char *argv[]){
    bool rval = true;
    BOOST_PP_REPEAT(                               \
        BOOST_PP_ARRAY_SIZE(TYPES),                \
        EACH_TYPE1,                                \
        nothing                                    \
    )
    std::cout << (rval ? "success!" : "failure") << std::endl;
    return rval ? EXIT_SUCCESS : EXIT_FAILURE;
}
Beispiel #14
0
	inline void get_free_function_signature_impl(T(*f)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), lua_State* L, std::string& s)
	{
		(void)f;
		s += "(";
#if BOOST_PP_ITERATION() > 0
		s += name_of_type(LUABIND_DECORATE_TYPE(A0), L, 0L);
		BOOST_PP_REPEAT(BOOST_PP_DEC(BOOST_PP_ITERATION()), LUABIND_ADD_LUA_TYPE_NAME, _)
#endif
		s += ")";
	}
Beispiel #15
0
            BOOST_FORCEINLINE
            void execute(boost::mpl::false_)
            {
                result_type res(
                    boost::move(boost::fusion::invoke(func_, futures_))
                );

                BOOST_PP_REPEAT(N, HPX_LCOS_LOCAL_DATAFLOW_FRAME_RESET_FUTURES, _)

                this->set_data(boost::move(res));
            }
Beispiel #16
0
 > const
 operator()(BOOST_PHOENIX_A_const_ref_a) const
 {
     return
         BOOST_PP_CAT(
              vector
           , BOOST_PHOENIX_ITERATION
         )<
             BOOST_PP_REPEAT(
                 BOOST_PHOENIX_ITERATION
               , BOOST_PHOENIX_LOCAL_GEN_ACTOR_TYPES_I
               , _
             )
         >(
             BOOST_PP_REPEAT(
                 BOOST_PHOENIX_ITERATION
               , BOOST_PHOENIX_LOCAL_GEN_ACTOR
               , _
             )
         );
 }
Beispiel #17
0
 inline saga::impl::wrapper_task <
     Cpi, Base, RetVal, BOOST_PP_REPEAT(P, GET_TEMP_ARG, _)>*
 task::create_task(
     char const *func_name, TR1::shared_ptr<Cpi> cpi, impl::proxy* prxy, 
     void (Base::*sync)(RetVal&, BOOST_PP_ENUM_PARAMS(P, FuncArg), saga::uuid),
     BOOST_PP_ENUM_BINARY_PARAMS (P, Arg, const& arg),
     bool (Base::*prep)(
         RetVal&, BOOST_PP_ENUM_PARAMS(P, FuncArg), saga::uuid))
 {
     return new saga::impl::wrapper_task<
         Cpi, Base, RetVal, BOOST_PP_REPEAT(P, GET_TEMP_ARG, _)>(
             func_name, cpi, prxy, sync, BOOST_PP_ENUM_PARAMS(P, arg), prep);
 }
Beispiel #18
0
// データ並び替えのルーチン兼、データ順序の定義
// Fortran配列の行列aaを配列bb[id]へ移動する。
void convert_to_tile(int n, double* aa, int lda, double** bb, int id, int nth)
{
	double* b = bb[id];
	for(int i=id*BL; i<n; i+=nth*BL){
		double* a = aa + i * lda;
		int j = 0;
		int isz = n -i;
		if(isz >= BL){
			// simd copy
			for(; j+RJ < i; j+= RJ){
				BOOST_PP_REPEAT(BL, CNV_MOVE_A2B, ignore);
				b += RJ*BL;
				a += RJ;
			}
			// serial copy
			for(; j<i+BL; j+=RJ){
				BOOST_PP_REPEAT(BL, CNV_MOVE_A2B_SERIAL, ignore);
				b += RJ*BL;
			}
		}
		else {
			// simd copy with bounds-check
			for(; j+RJ < i; j+= RJ){
				BOOST_PP_REPEAT(BL, CNV_MOVE_A2B_CHECK, ignore);
				b += RJ*BL;
				a += RJ;
			}
			// naiive copy
			for(; j<i+BL; j+=RJ){
				int jjsz = (RJ<n-j?RJ:n-j);
				for(int ii=0; ii<isz; ++ii)
					for(int jj=0; jj<jjsz; ++jj)
						b[ii*RJ+jj] = aa[SAFE_INDEX(i+ii,j+jj,lda)];
				b += RJ*BL;
			}
		}
	}
}
JAVABIND_DETAIL_WRAPPER_NATIVE_return_type JAVABIND_DETAIL_WRAPPER_NATIVE_function_name
  (JNIEnv* env, jobject self_internal, jlong peer
   BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, a))
{
  assert(peer != 0);
  peer_info<T>* info = reinterpret_cast<peer_info<T>*>(peer);
  F const* f = static_cast<F const*>(info->bootstrap_info->vtable[index]);
  return JAVABIND_DETAIL_WRAPPER_NATIVE_unwrap(JAVABIND_DETAIL_WRAPPER_NATIVE_call()
    ( 
     JAVABIND_DETAIL_WRAPPER_NATIVE_complementary_args(BOOST_PP_ITERATION())
     BOOST_PP_REPEAT(BOOST_PP_ITERATION() 
                      , JAVABIND_DETAIL_WRAPPER_NATIVE_wrap_argument, 0) ))
    ;
}
      // pass all parameters to the bulk_adaptor
      virtual void visit_args(v1_0::cpi* bulk_adaptor)
      {
          if(NULL != prep_func_ && NULL != bulk_adaptor && is_bulk_treated)
          {
              // execute the encapsulated function.
              ((static_cast<Base *>(bulk_adaptor))->*prep_func_)(
                  saga::detail::any_cast<RetVal&>(this->retval_), 
                  BOOST_PP_REPEAT(L, GETARG, _), this->get_uuid());

              // and save the bulk_adaptor.
              cpi_instance_ = bulk_adaptor->shared_from_this();
              if (will_async_in_adaptor == is_external_bulk_async)
              {
                  is_external_bulk_async = bulk_async_in_adaptor;
              }
          }
      }
BOOL TapeReaderView::OnInitDialog(CWindow wndFocus, LPARAM lInitParam) {

  DlgResize_Init( false, true );

  m_edtSymbol = GetDlgItem( IDC_EDTSYMBOL );
  m_btnStart = GetDlgItem( IDC_BTNSTART );
  m_btnStop = GetDlgItem( IDC_BTNSTOP );
  m_lvTape = GetDlgItem( IDC_LISTTAPE );

  m_edtSymbol.SetFocus(); 

  int ix = 0;
  BOOST_PP_REPEAT( BOOST_PP_ARRAY_SIZE( COLHDR_ARRAY ), COLHDR_EMIT_InsertColumn, ix )

  m_pIQFeed->Connect();

  return TRUE;
}
        /*! the function to be bound to the future */
        int bond (void)
        {
            saga::impl::task_base::state_setter setter (*this);
            int return_code = 1;

            try {
                TR1::shared_ptr<Base> adp(
                    TR1::static_pointer_cast<Base>(this->cpi_instance_));
                                  
                (adp.get()->*exec_)(saga::detail::any_cast<RetVal&>(this->retval_), 
                    BOOST_PP_REPEAT(L, GETARG, _), this->get_uuid());

            // set state to finished
                setter.state_ = saga::task::Done;
                return_code = 0;
            }
            catch ( saga::exception const& e ) {
                mutex_type::scoped_lock l(this->saga::impl::object::mtx_);
                this->found_saga_exception_ = true;
                this->saved_exception_object_ = e.get_object();
                this->saved_exception_list_ = e.get_all_exceptions();
                this->saved_exception_error_ = e.get_error();
            }
            catch ( std::exception const& e ) {
                mutex_type::scoped_lock l(this->saga::impl::object::mtx_);
                this->found_exception_ = true;
                this->saved_exception_ = e;
            }
            catch ( ... ) {
                mutex_type::scoped_lock l(this->saga::impl::object::mtx_);

                TR1::shared_ptr<saga::impl::object> impl(
                    TR1::static_pointer_cast<saga::impl::object>(
                        TR1::const_pointer_cast<saga::impl::proxy>(
                            this->cpi_instance_->get_proxy()->shared_from_this())));

                this->found_saga_exception_ = true;
                this->saved_exception_object_ = runtime::get_object(impl);
                this->saved_exception_list_.clear();
                this->saved_exception_message_ = "Unspecified error caught";
                this->saved_exception_error_ = (saga::error)saga::adaptors::Unexpected;
            }
            return return_code;
        }
 static type
 make(
     TryCatch const& try_catch
     , Expr const& catch_
 )
 {
     return
         gen_type::make(
             BOOST_PP_REPEAT(
                 BOOST_PHOENIX_ITERATION
                 , BOOST_PHOENIX_CATCH_PUSH_BACK_R1
                 , _
             )
             , proto::make_expr<
             phoenix::tag::catch_all
             , proto::basic_default_domain
             >(catch_)
         );
 }
        expectation()
            : BOOST_PP_REPEAT(MOCK_NUM_ARGS,
                MOCK_EXPECTATION_INITIALIZE, _)
            BOOST_PP_COMMA_IF(MOCK_NUM_ARGS)
                i_( boost::make_shared< unlimited >() )
            , file_( "unknown location" )
            , line_( 0 )
        {}
        expectation( const char* file, int line )
            : BOOST_PP_REPEAT(MOCK_NUM_ARGS,
                MOCK_EXPECTATION_INITIALIZE, _)
            BOOST_PP_COMMA_IF(MOCK_NUM_ARGS)
                i_( boost::make_shared< unlimited >() )
            , file_( file )
            , line_( line )
        {}

        ~expectation()
        {
            for( sequences_cit it = sequences_.begin();
                it != sequences_.end(); ++it )
                (*it)->remove( this );
        }

        expectation& once()
        {
            i_ = boost::make_shared< detail::once >();
            return *this;
        }
        expectation& never()
        {
            i_ = boost::make_shared< detail::never >();
            return *this;
        }
        expectation& exactly( std::size_t count )
        {
            i_ = boost::make_shared< detail::exactly >( count );
            return *this;
        }
Beispiel #25
0
  );


#define EPP_OUTER( z, type, unused ) \
  BOOST_PP_REPEAT_FROM_TO ( \
    EPP_VECTOR_TYPE_MIN_SIZE( type ), \
    EPP_VECTOR_TYPE_MAX_SIZE( type ), \
    EPP_OUTER_FUNCTION, \
    type \
  )

#define EPP_OUTER_PROTOTYPES( z, type, unused ) \
  BOOST_PP_REPEAT_FROM_TO ( \
    EPP_VECTOR_TYPE_MIN_SIZE( type ), \
    EPP_VECTOR_TYPE_MAX_SIZE( type ), \
    EPP_OUTER_PROTOTYPE, \
    type \
  )

namespace emath {

#ifdef __CUDACC__
BOOST_PP_REPEAT( EPP_VECTOR_TYPE_COUNT, EPP_OUTER, EPP_UNUSED )
#else
BOOST_PP_REPEAT( EPP_VECTOR_TYPE_COUNT, EPP_OUTER_PROTOTYPES, EPP_UNUSED )
#endif

}

#endif
Beispiel #26
0
    typedef                                                                     \
        expression::argument<BOOST_PP_INC(N)>::type                             \
        BOOST_PP_CAT(BOOST_PP_CAT(name, BOOST_PP_INC(N)), _type)                \
        BOOST_ATTRIBUTE_UNUSED;                                                 \
    /**/
    
    #define BOOST_PHOENIX_ARGUMENT_N_INSTANCE(_, N, name)                       \
    expression::argument<BOOST_PP_INC(N)>::type const                           \
        BOOST_ATTRIBUTE_UNUSED                                                  \
        BOOST_PP_CAT(name, BOOST_PP_INC(N)) = {{{}}};                           \
    /**/


    namespace placeholders
    {
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, arg)
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, _)
#ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, arg)
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, _)
#endif
    }

    namespace arg_names
    {
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, arg)
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, _)
#ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, arg)
        BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, _)
#endif
Beispiel #27
0
    const EPP_VECTOR_TYPE( type, index ) &_size \
  );

#define EPP_SERIALIZE( z, type, unused ) \
  BOOST_PP_REPEAT_FROM_TO ( \
    EPP_VECTOR_TYPE_MIN_SIZE( type ), \
    EPP_VECTOR_TYPE_MAX_SIZE( type ), \
    EPP_SERIALIZE_FUNCTION, \
    type \
  )

#define EPP_SERIALIZE_PROTOTYPES( z, type, unused ) \
  BOOST_PP_REPEAT_FROM_TO ( \
    EPP_VECTOR_TYPE_MIN_SIZE( type ), \
    EPP_VECTOR_TYPE_MAX_SIZE( type ), \
    EPP_SERIALIZE_PROTOTYPE, \
    type \
  )

namespace emath {

#ifdef __CUDACC__
  BOOST_PP_REPEAT( EPP_VECTOR_TYPE_COUNT, EPP_SERIALIZE, EPP_UNUSED )
#else
  BOOST_PP_REPEAT( EPP_VECTOR_TYPE_COUNT, EPP_SERIALIZE_PROTOTYPES, EPP_UNUSED )
#endif

}

#endif
 virtual void serialize( std::ostream& s ) const
 {
     s << "" BOOST_PP_REPEAT(MOCK_NUM_ARGS,
         MOCK_EXPECTATION_SERIALIZE_ANY, _ );
 }
Beispiel #29
0
#include <core/simulator_layout.hpp>
#include <boost/preprocessor/repeat.hpp>

#define MultiNicX BOOST_PP_CAT(MultiNic, FLEXUS_MULTI_NIC_NUMPORTS)

#define FLEXUS_BEGIN_COMPONENT MultiNicX
#include FLEXUS_BEGIN_COMPONENT_DECLARATION()

#include <components/Common/Transports/MemoryTransport.hpp>

#define NodeOutputPort(z,N,_) DYNAMIC_PORT_ARRAY( PushOutput, MemoryTransport, BOOST_PP_CAT(ToNode,N) )
#define NodeInputPort(z,N,_) DYNAMIC_PORT_ARRAY( PushInput, MemoryTransport, BOOST_PP_CAT(FromNode,N) )

COMPONENT_PARAMETERS(
  FLEXUS_PARAMETER( VChannels, int, "Virtual channels", "vc", 3 )
  FLEXUS_PARAMETER( RecvCapacity, uint32_t, "Recv Queue Capacity", "recv-capacity", 1)
  FLEXUS_PARAMETER( SendCapacity, uint32_t, "Send Queue Capacity", "send-capacity", 1)
);

COMPONENT_INTERFACE(
  DYNAMIC_PORT_ARRAY( PushOutput, MemoryTransport, ToNetwork )
  DYNAMIC_PORT_ARRAY( PushInput, MemoryTransport, FromNetwork )
  BOOST_PP_REPEAT(FLEXUS_MULTI_NIC_NUMPORTS, NodeOutputPort, _ )
  BOOST_PP_REPEAT(FLEXUS_MULTI_NIC_NUMPORTS, NodeInputPort, _ )
  DRIVE( MultiNicDrive )
);

#include FLEXUS_END_COMPONENT_DECLARATION()
#define FLEXUS_END_COMPONENT MultiNicX
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_PARAM, _)
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POLICY_DECL, _)
			m_arity = 0 BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_ARITY, 0);
		}

		// non-member functions

		template<class R, class T BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A), class Policies>
		overload_rep(R(*)(T* BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), Policies*)
			: m_pointer_offset(0)
			, m_num_args(BOOST_PP_ITERATION())
			, m_const(false)
		{
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_PARAM, _)
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POLICY_DECL, _)
			m_arity = 0 BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_ARITY, 0);
		}

		template<class R, class T BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A), class Policies>
		overload_rep(R(*)(const T* BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), Policies*)
			: m_pointer_offset(0)
			, m_num_args(BOOST_PP_ITERATION())
			, m_const(true)
		{
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_PARAM, _)
			BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POLICY_DECL, _)
			m_arity = 0 BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_ARITY, 0);
		}

		template<class R, class T BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A), class Policies>
		overload_rep(R(*)(T& BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), Policies*)