#include <iostream>
#include <list>
#include <utility>
#include <vector>
template <typename Func, typename T, std::size_t ... Is>
decltype(auto) apply(Func&& f, const std::list<T>& pars, std::index_sequence<Is...>)
{
std::vector<T> v(pars.rbegin(), pars.rend());
return std::forward<Func>(f)(v.at(Is)...);
}
template <std::size_t N, typename Func, typename T>
decltype(auto) apply(Func&& f, const std::list<T>& pars)
{
return apply(std::forward<Func>(f), pars, std::make_index_sequence<N>());
}
void print(int a, int b, int c, int d, int e, int f)
{
std::cout << a << " " << b << " "<< c << " "<< d << " "<< e << " "<< f << std::endl;
}
int main()
{
const std::list<int> l{4, 8, 15, 16, 23, 42};
apply<6>(print, l);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgLi4uIElzPgpkZWNsdHlwZShhdXRvKSBhcHBseShGdW5jJiYgZiwgY29uc3Qgc3RkOjpsaXN0PFQ+JiBwYXJzLCBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKewogICAgc3RkOjp2ZWN0b3I8VD4gdihwYXJzLnJiZWdpbigpLCBwYXJzLnJlbmQoKSk7CgogIHJldHVybiBzdGQ6OmZvcndhcmQ8RnVuYz4oZikodi5hdChJcykuLi4pOwp9Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTiwgdHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVD4KZGVjbHR5cGUoYXV0bykgYXBwbHkoRnVuYyYmIGYsIGNvbnN0IHN0ZDo6bGlzdDxUPiYgcGFycykKewogIHJldHVybiBhcHBseShzdGQ6OmZvcndhcmQ8RnVuYz4oZiksIHBhcnMsIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPigpKTsKfQoKdm9pZCBwcmludChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBmKQp7CiAgICBzdGQ6OmNvdXQgPDwgYSA8PCAiICIgPDwgYiA8PCAiICI8PCBjIDw8ICIgIjw8IGQgPDwgIiAiPDwgZSA8PCAiICI8PCBmIDw8IHN0ZDo6ZW5kbDsKfQoKCmludCBtYWluKCkKewogICAgY29uc3Qgc3RkOjpsaXN0PGludD4gbHs0LCA4LCAxNSwgMTYsIDIzLCA0Mn07CiAgICAKICAgIGFwcGx5PDY+KHByaW50LCBsKTsKfQo=