#include <iostream>
#include <utility>
void helper()
{
std::cout << "no args" << std::endl;
}
template<size_t N, typename T>
void helper(T&& arg)
{
std::cout << "arg " << N << " = " << arg << std::endl;
}
template<size_t N, typename T, typename... Args>
void helper(T&& arg, Args&&... args)
{
helper<N>(std::forward<T>(arg));
helper<N+1, Args...>(std::forward<Args>(args)...);
}
template<typename T, typename... Args>
void helper(T&& arg, Args&& ... args)
{
helper<0>(std::forward<T>(arg), std::forward<Args>(args)... );
}
int main()
{
helper();
std::cout << '\n';
helper("single");
std::cout << '\n';
helper("one", 2U);
std::cout << '\n';
helper(1,"two", 3.0, 4L);
std::cout << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnZvaWQgaGVscGVyKCkKewogICAgc3RkOjpjb3V0IDw8ICJubyBhcmdzIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlPHNpemVfdCBOLCB0eXBlbmFtZSBUPgp2b2lkIGhlbHBlcihUJiYgYXJnKQp7CiAgICBzdGQ6OmNvdXQgPDwgImFyZyAiIDw8IE4gPDwgIiA9ICIgPDwgYXJnIDw8IHN0ZDo6ZW5kbDsKfQoKdGVtcGxhdGU8c2l6ZV90IE4sIHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CnZvaWQgaGVscGVyKFQmJiBhcmcsIEFyZ3MmJi4uLiBhcmdzKQp7CiAgICBoZWxwZXI8Tj4oc3RkOjpmb3J3YXJkPFQ+KGFyZykpOwogICAgaGVscGVyPE4rMSwgQXJncy4uLj4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBoZWxwZXIoVCYmIGFyZywgQXJncyYmIC4uLiBhcmdzKQp7CiAgICBoZWxwZXI8MD4oc3RkOjpmb3J3YXJkPFQ+KGFyZyksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiApOwp9CgppbnQgbWFpbigpCnsKICAgIGhlbHBlcigpOwogICAgc3RkOjpjb3V0IDw8ICdcbic7CgogICAgaGVscGVyKCJzaW5nbGUiKTsKICAgIHN0ZDo6Y291dCA8PCAnXG4nOwoKICAgIGhlbHBlcigib25lIiwgMlUpOwogICAgc3RkOjpjb3V0IDw8ICdcbic7CgogICAgaGVscGVyKDEsInR3byIsIDMuMCwgNEwpOwogICAgc3RkOjpjb3V0IDw8ICdcbic7CgogICAgcmV0dXJuIDA7Cn0=