#include <iostream>
#include <utility>
#include <tuple>
template <typename ... Args>
void f(Args... args)
{
int dummy[] = {0, (std::cout << " " << std::forward<Args>(args), 0)...};
}
namespace detail
{
template<std::size_t I>
struct impl
{
template <typename TUPLE>
auto operator() (TUPLE&& t) { return std::get<I>(t); }
};
template<>
struct impl<2>
{
template <typename TUPLE>
auto operator() (TUPLE&& t) { return std::get<2>(t) + 40; }
};
template <std::size_t... Is, typename TUPLE>
void bar(std::index_sequence<Is...>, TUPLE&& Tuple) {
return f(impl<Is>{}(std::forward<TUPLE>(Tuple))...);
}
}
template<typename... Args>
void bar(Args... args) {
detail::bar(std::index_sequence_for<Args...>(), std::forward_as_tuple(args...));
}
int main() {
bar(0, 1, 2, 3, 4, 5, 6);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHR1cGxlPgoKCnRlbXBsYXRlIDx0eXBlbmFtZSAuLi4gQXJncz4Kdm9pZCBmKEFyZ3MuLi4gYXJncykKewoJaW50IGR1bW15W10gPSB7MCwgKHN0ZDo6Y291dCA8PCAiICIgPDwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLCAwKS4uLn07Cn0KCm5hbWVzcGFjZSBkZXRhaWwKewoJCgl0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBJPgoJc3RydWN0IGltcGwKCXsKCQl0ZW1wbGF0ZSA8dHlwZW5hbWUgVFVQTEU+CgkJYXV0byBvcGVyYXRvcigpIChUVVBMRSYmIHQpIHsgcmV0dXJuIHN0ZDo6Z2V0PEk+KHQpOyB9Cgl9OwoJCgl0ZW1wbGF0ZTw+CglzdHJ1Y3QgaW1wbDwyPgoJewoJCXRlbXBsYXRlIDx0eXBlbmFtZSBUVVBMRT4KCQlhdXRvIG9wZXJhdG9yKCkgKFRVUExFJiYgdCkgeyByZXR1cm4gc3RkOjpnZXQ8Mj4odCkgKyA0MDsgfQoJfTsKCgl0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHR5cGVuYW1lIFRVUExFPgoJdm9pZCBiYXIoc3RkOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sIFRVUExFJiYgVHVwbGUpIHsKCQlyZXR1cm4gZihpbXBsPElzPnt9KHN0ZDo6Zm9yd2FyZDxUVVBMRT4oVHVwbGUpKS4uLik7Cgl9Cgp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgp2b2lkIGJhcihBcmdzLi4uIGFyZ3MpIHsKICAgIGRldGFpbDo6YmFyKHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPEFyZ3MuLi4+KCksIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShhcmdzLi4uKSk7Cn0KCmludCBtYWluKCkgewoJYmFyKDAsIDEsIDIsIDMsIDQsIDUsIDYpOwoJCn0=