#include <iostream>
#include <functional>
using namespace std;
struct Functor
{
template<typename T>
void operator()(T& t) const { std::cout << t << std::endl; }
};
template<std::size_t I = 0, typename FuncT, typename... Tp>
inline typename std::enable_if<I == sizeof...(Tp), void>::type
for_each(std::tuple<Tp...> &, FuncT) // Unused arguments are given no names.
{ }
template<std::size_t I = 0, typename FuncT, typename... Tp>
inline typename std::enable_if<I < sizeof...(Tp), void>::type
for_each(std::tuple<Tp...>& t, FuncT f)
{
f(std::get<I>(t));
for_each<I + 1, FuncT, Tp...>(t, f);
}
int main() {
auto t = make_tuple(1, 2, "abc", "def", 4.0f);
for_each(t, Functor());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBGdW5jdG9yIAp7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgdm9pZCBvcGVyYXRvcigpKFQmIHQpIGNvbnN0IHsgc3RkOjpjb3V0IDw8IHQgPDwgc3RkOjplbmRsOyB9Cn07Cgp0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBJID0gMCwgdHlwZW5hbWUgRnVuY1QsIHR5cGVuYW1lLi4uIFRwPgppbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SSA9PSBzaXplb2YuLi4oVHApLCB2b2lkPjo6dHlwZQogIGZvcl9lYWNoKHN0ZDo6dHVwbGU8VHAuLi4+ICYsIEZ1bmNUKSAvLyBVbnVzZWQgYXJndW1lbnRzIGFyZSBnaXZlbiBubyBuYW1lcy4KICB7IH0KCnRlbXBsYXRlPHN0ZDo6c2l6ZV90IEkgPSAwLCB0eXBlbmFtZSBGdW5jVCwgdHlwZW5hbWUuLi4gVHA+CmlubGluZSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJIDwgc2l6ZW9mLi4uKFRwKSwgdm9pZD46OnR5cGUKICBmb3JfZWFjaChzdGQ6OnR1cGxlPFRwLi4uPiYgdCwgRnVuY1QgZikKICB7CiAgICBmKHN0ZDo6Z2V0PEk+KHQpKTsKICAgIGZvcl9lYWNoPEkgKyAxLCBGdW5jVCwgVHAuLi4+KHQsIGYpOwogIH0KCiBpbnQgbWFpbigpIHsKICAgICBhdXRvIHQgPSBtYWtlX3R1cGxlKDEsIDIsICJhYmMiLCAiZGVmIiwgNC4wZik7CiAgICAgZm9yX2VhY2godCwgRnVuY3RvcigpKTsKCiAgICAgcmV0dXJuIDA7CiB9Cg==