#include <iostream>
#include <tuple>
#include <utility>
template<std::size_t ... Is, typename Tuple>
void print_helper(std::ostream& s, const Tuple& t, std::index_sequence<Is...>)
{
int dummy[] = { 0, ((s << std::get<Is>(t) << ", "), 0)...};
(void) dummy; // remove warning for unused var
}
template<typename Tuple>
void print(std::ostream& s, const Tuple& t)
{
print_helper(s, t, std::make_index_sequence<std::tuple_size<Tuple>::value>());
}
int main()
{
print(std::cout, std::make_tuple("hello ", '*', 42));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx1dGlsaXR5PgoKdGVtcGxhdGU8c3RkOjpzaXplX3QgLi4uIElzLCB0eXBlbmFtZSBUdXBsZT4Kdm9pZCBwcmludF9oZWxwZXIoc3RkOjpvc3RyZWFtJiBzLCBjb25zdCBUdXBsZSYgdCwgc3RkOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCnsKICAgIGludCBkdW1teVtdID0geyAwLCAoKHMgPDwgc3RkOjpnZXQ8SXM+KHQpIDw8ICIsICIpLCAwKS4uLn07CiAgICAodm9pZCkgZHVtbXk7IC8vIHJlbW92ZSB3YXJuaW5nIGZvciB1bnVzZWQgdmFyCn0KCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZT4Kdm9pZCBwcmludChzdGQ6Om9zdHJlYW0mIHMsIGNvbnN0IFR1cGxlJiB0KQp7CiAgICBwcmludF9oZWxwZXIocywgdCwgc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlPigpKTsKfQoKaW50IG1haW4oKQp7CglwcmludChzdGQ6OmNvdXQsIHN0ZDo6bWFrZV90dXBsZSgiaGVsbG8gIiwgJyonLCA0MikpOwp9