namespace helpers {
// structs
template <typename T>
struct NumOfLambdaArgs;
template <typename C, typename R, typename... Args>
struct NumOfLambdaArgs<R(C::\*)(Args...) const>;
// global functions
template <typename ACT, typename... T, size_t N_ARGS = NumOfLambdaArgs<ACT>::value>
std::enable_if<N_ARGS==sizeof...(T)+2, void>::type call_with_args(
const ACT& body,
size_t g_id,
size_t iwork,
T... arg
);
template <typename ACT, typename... T, size_t N_ARGS = NumOfLambdaArgs<ACT>::value>
std::enable_if<N_ARGS==sizeof...(T)+1, void>::type call_with_args(
const ACT& body,
size_t g_id,
size_t iwork,
T... arg
);
template <typename ACT, typename... T, size_t N_ARGS = NumOfLambdaArgs<ACT>::value>
std::enable_if<N_ARGS==sizeof...(T), void>::type call_with_args(
const ACT& body,
size_t g_id,
size_t iwork,
T... arg
);
} // namespace helpers