
#define DYNAMIX_V1_CREATE_COMBINATOR_CALL_%{arity}_OVERLOAD(message_name, return_type, method_name %{args_coma}) \
    template <typename Combinator> \
    void method_name(I_DYNAMIX_V1_MSG_STRUCT_NAME(message_name)::traits::obj_t& _d_obj %{coma_args_signature}, Combinator& _d_combinator) \
    { \
        /* not forwarded arguments. We DO want an error if some of them are rvalue references */ \
        I_DYNAMIX_V1_MSG_STRUCT_NAME(message_name)::traits::caller::call_with_v1_combinator(I_DYNAMIX_V1_MSG_STRUCT_NAME(message_name)::info, _d_combinator, _d_obj %{coma_fwd_args}); \
    } \
    template <template <typename> class Combinator> \
    typename Combinator<return_type>::result_type method_name(I_DYNAMIX_V1_MSG_STRUCT_NAME(message_name)::traits::obj_t& _d_obj %{coma_args_signature}) \
    { \
        Combinator<return_type> _d_combinator; \
        I_DYNAMIX_V1_MSG_STRUCT_NAME(message_name)::traits::caller::call_with_v1_combinator(I_DYNAMIX_V1_MSG_STRUCT_NAME(message_name)::info, _d_combinator, _d_obj %{coma_fwd_args}); \
        return _d_combinator.result(); \
    }

#define DYNAMIX_V1_CREATE_COMBINATOR_CALL_%{arity}(return_type, message %{args_coma}) \
    DYNAMIX_V1_CREATE_COMBINATOR_CALL_%{arity}_OVERLOAD(message, return_type, message %{args_coma})
