rendered paste body#ifndef RDKUTILITY_H_#define RDKUTILITY_H_#include <tuple>#include <functional>#include <cstddef>using std::tuple;using std::function;using std::size_t;namespace RDKNAMESPACE{ template<typename... Args, typename... ArgsT> inline void unpack(const function<void (Args...)> &, const tuple<ArgsT...> &); template<size_t length, typename... Args> inline auto pack(const tuple<Args...> &);}#include <RDKUtility_impl>#endif#ifndef RDKUTILITYIMPL_H_#define RDKUTILITYIMPL_H_namespace RDKNAMESPACE{ template<typename... Args, typename... ArgsT> inline void unpack(const function<void (Args...)> f, const tuple<ArgsT...> & t) { unpack_impl<sizeof...(Args), Args..., Argst...>(f, t); } template<size_t N, typename... ArgsF, typename... ArgsT, typename... Args> inline void unpack_impl(const function<void (Args...)> & f, const tuple<ArgsT...> & t, Args&&... a) { unpack_impl<N-1>(f, t, std::forward(get<N-1>(t)), std::forward<Args>(a)...); } template<> template<typename... Args, typename... ArgsT> inline void unpack_impl<0>(const function<void (Args...)> & f, const tuple<ArgsT...> & t, Args&&... a) { f(std::forward<Args>(a)...); } template<size_t length, typename... Args> inline auto pack(const tuple<Args...> & t) { return pack_impl<length>(t); } template<size_t length, typename... ArgsT, typename... Args> inline auto pack_impl(const tuple<ArgsT...> & t, Args&&... a) { return pack_impl<length-1>(t, std::forward(get<length-1>(t)), std::forward<Args>(a)...); } template<> template<typename... ArgsT, typename... Args> inline tuple<Args...> && pack_impl(const tuple<ArgsT...> & t, Args&&... a) { return make_tuple(std::forward<Args>(a)...); }}#endif