#include <iostream>
#include <tuple>
#include <utility>
namespace detail {
template <typename F, typename TUPLE, std::size_t ... Is>
void run_for_each(F&& f, TUPLE&& t, std::index_sequence<Is...>)
{
const int dummy[] = {0, (f(std::get<Is>(std::forward<TUPLE>(t))), void(), 0)...};
static_cast<void>(dummy); // Avoid warning for unused variable
}
}
template <typename F, typename TUPLE>
void run_for_each(F&& f, TUPLE&& t)
{
detail::run_for_each(std::forward<F>(f),
std::forward<TUPLE>(t),
std::make_index_sequence<std::tuple_size<std::decay_t<TUPLE>>::value>());
}
int main() {
auto t = std::make_tuple(std::less<int>{}, std::greater<int>{});
run_for_each([](auto&&f) {std::cout << f(0, 1) << " ";}, t);
std::cout << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx1dGlsaXR5PgoKbmFtZXNwYWNlIGRldGFpbCB7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUgVFVQTEUsIHN0ZDo6c2l6ZV90IC4uLiBJcz4KICAgIHZvaWQgcnVuX2Zvcl9lYWNoKEYmJiBmLCBUVVBMRSYmIHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+KQogICAgewogICAgICAgIGNvbnN0IGludCBkdW1teVtdID0gezAsIChmKHN0ZDo6Z2V0PElzPihzdGQ6OmZvcndhcmQ8VFVQTEU+KHQpKSksIHZvaWQoKSwgMCkuLi59OwogICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KGR1bW15KTsgLy8gQXZvaWQgd2FybmluZyBmb3IgdW51c2VkIHZhcmlhYmxlCiAgICB9Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBUVVBMRT4Kdm9pZCBydW5fZm9yX2VhY2goRiYmIGYsIFRVUExFJiYgdCkKewogICAgIGRldGFpbDo6cnVuX2Zvcl9lYWNoKHN0ZDo6Zm9yd2FyZDxGPihmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8VFVQTEU+KHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3NpemU8c3RkOjpkZWNheV90PFRVUExFPj46OnZhbHVlPigpKTsKfQoKaW50IG1haW4oKSB7CiAgICBhdXRvIHQgPSBzdGQ6Om1ha2VfdHVwbGUoc3RkOjpsZXNzPGludD57fSwgc3RkOjpncmVhdGVyPGludD57fSk7CgogICAgcnVuX2Zvcl9lYWNoKFtdKGF1dG8mJmYpIHtzdGQ6OmNvdXQgPDwgZigwLCAxKSA8PCAiICI7fSwgdCk7CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9Cg==