#include <iostream>
#include <utility>
template <bool b1, bool b2, bool b3, bool b4>
void f()
{
std::cout << b1 << b2 << b3 << b4 << std::endl;
}
template <std::size_t...Is>
void call_f_helper(int i, std::index_sequence<Is...>)
{
using f_t = void();
f_t* fs[] = {&f<(Is >> 0) & 1, (Is >> 1) & 1, (Is >> 2) & 1, (Is >> 3) & 1>...};
fs[i]();
}
void call_f(bool b1, bool b2, bool b3, bool b4)
{
call_f_helper(b1 << 0 | b2 << 1 | b3 << 2 | b4 << 3, std::make_index_sequence<16>());
}
int main()
{
for (int i = 0; i < 16; ++i) {
call_f(i & 8, i & 4, i & 2, i & 1);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29sIGIzLCBib29sIGI0Pgp2b2lkIGYoKQp7CiAgICBzdGQ6OmNvdXQgPDwgYjEgPDwgYjIgPDwgYjMgPDwgYjQgPDwgc3RkOjplbmRsOyAgIAp9Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi5Jcz4Kdm9pZCBjYWxsX2ZfaGVscGVyKGludCBpLCBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKewogICAgdXNpbmcgZl90ID0gdm9pZCgpOwogICAgZl90KiBmc1tdID0geyZmPChJcyA+PiAwKSAmIDEsIChJcyA+PiAxKSAmIDEsIChJcyA+PiAyKSAmIDEsIChJcyA+PiAzKSAmIDE+Li4ufTsKICAgIAogICAgZnNbaV0oKTsKfQoKCnZvaWQgY2FsbF9mKGJvb2wgYjEsIGJvb2wgYjIsIGJvb2wgYjMsIGJvb2wgYjQpCnsKICAgIGNhbGxfZl9oZWxwZXIoYjEgPDwgMCB8IGIyIDw8IDEgfCBiMyA8PCAyIHwgYjQgPDwgMywgc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPDE2PigpKTsgIAp9CgoKaW50IG1haW4oKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKICAgICAgICBjYWxsX2YoaSAmIDgsIGkgJiA0LCBpICYgMiwgaSAmIDEpOyAgIAogICAgfQp9Cg==