#include <iostream>
#if 1 // Not in C++11 // make_index_sequence
#include <cstdint>
template <std::size_t...> struct index_sequence {};
template <std::size_t N, std::size_t... Is>
struct make_index_sequence : make_index_sequence<N - 1, N - 1, Is...> {};
template <std::size_t... Is>
struct make_index_sequence<0u, Is...> : index_sequence<Is...> {};
#endif // make_index_sequence
namespace detail
{
template<std::size_t...Is, typename... Ts>
void helper(index_sequence<Is...>, Ts&&...args)
{
int dummy[] = {0, ((std::cout << "arg " << Is << " = " << args << std::endl), 0)...};
static_cast<void>(dummy);
}
}
void helper()
{
std::cout << "No args" << std::endl;
}
template<typename ... Ts>
void helper(Ts&&... args)
{
detail::helper(make_index_sequence<sizeof...(Ts)>(), std::forward<Ts>(args)...);
}
int main()
{
helper();
helper(42, 5, "toto");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2lmIDEgLy8gTm90IGluIEMrKzExIC8vIG1ha2VfaW5kZXhfc2VxdWVuY2UKI2luY2x1ZGUgPGNzdGRpbnQ+Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4+IHN0cnVjdCBpbmRleF9zZXF1ZW5jZSB7fTsKCnRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOLCBzdGQ6OnNpemVfdC4uLiBJcz4Kc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2UgOiBtYWtlX2luZGV4X3NlcXVlbmNlPE4gLSAxLCBOIC0gMSwgSXMuLi4+IHt9OwoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElzPgpzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZTwwdSwgSXMuLi4+IDogaW5kZXhfc2VxdWVuY2U8SXMuLi4+IHt9OwoKI2VuZGlmIC8vIG1ha2VfaW5kZXhfc2VxdWVuY2UKCm5hbWVzcGFjZSBkZXRhaWwKewogICAgdGVtcGxhdGU8c3RkOjpzaXplX3QuLi5JcywgdHlwZW5hbWUuLi4gVHM+CiAgICB2b2lkIGhlbHBlcihpbmRleF9zZXF1ZW5jZTxJcy4uLj4sIFRzJiYuLi5hcmdzKQogICAgewogICAgICAgIGludCBkdW1teVtdID0gezAsICgoc3RkOjpjb3V0IDw8ICJhcmcgIiA8PCBJcyA8PCAiID0gIiA8PCBhcmdzIDw8IHN0ZDo6ZW5kbCksIDApLi4ufTsKICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihkdW1teSk7CiAgICB9Cgp9Cgp2b2lkIGhlbHBlcigpCnsKICAgIHN0ZDo6Y291dCA8PCAiTm8gYXJncyIgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gVHM+CnZvaWQgaGVscGVyKFRzJiYuLi4gYXJncykKewogICAgZGV0YWlsOjpoZWxwZXIobWFrZV9pbmRleF9zZXF1ZW5jZTxzaXplb2YuLi4oVHMpPigpLCBzdGQ6OmZvcndhcmQ8VHM+KGFyZ3MpLi4uKTsKfQoKaW50IG1haW4oKQp7CiAgICBoZWxwZXIoKTsKICAgIGhlbHBlcig0MiwgNSwgInRvdG8iKTsKCiAgICByZXR1cm4gMDsKfQo=