#include <iostream>
#include <utility>
#include <array>
#include <cstddef>
template <typename F, std::size_t... I>
constexpr auto generate (F&& f, std::index_sequence<I...>) -> std::array<decltype(std::forward<F> (f) (0)), sizeof...(I)> {
return {{ std::forward<F> (f) (I) ... }};
}
template <std::size_t S, typename F>
constexpr auto generate (F&& f) -> std::array<decltype(std::forward<F> (f) (0)), S> {
return generate (std::forward<F> (f), std::make_index_sequence<S> {});
}
constexpr int myLutCalc (std::size_t index) {
return index * 2;
}
constexpr auto myLUT = generate<10> (myLutCalc);
int main() {
for (auto& x : myLUT) {
std::cout << x << ", ";
}
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8Y3N0ZGRlZj4KCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgc3RkOjpzaXplX3QuLi4gST4KY29uc3RleHByIGF1dG8gZ2VuZXJhdGUgKEYmJiBmLCBzdGQ6OmluZGV4X3NlcXVlbmNlPEkuLi4+KSAtPiBzdGQ6OmFycmF5PGRlY2x0eXBlKHN0ZDo6Zm9yd2FyZDxGPiAoZikgKDApKSwgc2l6ZW9mLi4uKEkpPiB7CglyZXR1cm4ge3sgc3RkOjpmb3J3YXJkPEY+IChmKSAoSSkgLi4uIH19Owp9Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgUywgdHlwZW5hbWUgRj4KY29uc3RleHByIGF1dG8gZ2VuZXJhdGUgKEYmJiBmKSAtPiBzdGQ6OmFycmF5PGRlY2x0eXBlKHN0ZDo6Zm9yd2FyZDxGPiAoZikgKDApKSwgUz4gewoJcmV0dXJuIGdlbmVyYXRlIChzdGQ6OmZvcndhcmQ8Rj4gKGYpLCBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8Uz4ge30pOwp9Cgpjb25zdGV4cHIgaW50IG15THV0Q2FsYyAoc3RkOjpzaXplX3QgaW5kZXgpIHsKCXJldHVybiBpbmRleCAqIDI7Cn0KCmNvbnN0ZXhwciBhdXRvIG15TFVUID0gZ2VuZXJhdGU8MTA+IChteUx1dENhbGMpOwoKaW50IG1haW4oKSB7Cglmb3IgKGF1dG8mIHggOiBteUxVVCkgewoJCXN0ZDo6Y291dCA8PCB4IDw8ICIsICI7Cgl9CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=
0, 2, 4, 6, 8, 10, 12, 14, 16, 18,