#include <functional>
#include <iostream>
#include <tuple>
#include <type_traits>
#include <utility>
#include <experimental/tuple>
using namespace std;
namespace detail {
template<class F, class...Args>
void for_each_arg(F&& f, Args&&...args) {
using detail = int[];
static_cast<void>(detail{((f(std::forward<Args>(args))), void(), 0)..., 0});
}
}
template <typename F, typename Tuple>
void for_each_tuple_element(F&& f, Tuple&& t) {
return experimental::apply([&](auto&&...args) { detail::for_each_arg(forward<F>(f), decltype(args)(args)... ); }, forward<Tuple>(t));
}
int main(){
for_each_tuple_element([](const auto& i){cout << i << ' ';}, make_tuple(3.14, "hello", -1));
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8ZXhwZXJpbWVudGFsL3R1cGxlPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCm5hbWVzcGFjZSBkZXRhaWwgewogICAgdGVtcGxhdGU8Y2xhc3MgRiwgY2xhc3MuLi5BcmdzPgogICAgdm9pZCBmb3JfZWFjaF9hcmcoRiYmIGYsIEFyZ3MmJi4uLmFyZ3MpIHsKICAgICAgICB1c2luZyBkZXRhaWwgPSBpbnRbXTsKCiAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oZGV0YWlseygoZihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykpKSwgdm9pZCgpLCAwKS4uLiwgMH0pOwogICAgfQp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUgVHVwbGU+CnZvaWQgZm9yX2VhY2hfdHVwbGVfZWxlbWVudChGJiYgZiwgVHVwbGUmJiB0KSB7CiAgICByZXR1cm4gZXhwZXJpbWVudGFsOjphcHBseShbJl0oYXV0byYmLi4uYXJncykgeyBkZXRhaWw6OmZvcl9lYWNoX2FyZyhmb3J3YXJkPEY+KGYpLCBkZWNsdHlwZShhcmdzKShhcmdzKS4uLiApOyB9LCBmb3J3YXJkPFR1cGxlPih0KSk7CQp9CgppbnQgbWFpbigpewoJZm9yX2VhY2hfdHVwbGVfZWxlbWVudChbXShjb25zdCBhdXRvJiBpKXtjb3V0IDw8IGkgPDwgJyAnO30sIG1ha2VfdHVwbGUoMy4xNCwgImhlbGxvIiwgLTEpKTsKfQ==