#include <array>
#include <iostream>
using namespace std;
template<size_t... Is> struct seq {};
template<size_t N, size_t... Is> struct gen_seq : gen_seq<N - 1, N - 1, Is...> {};
template <size_t... Is> struct gen_seq<0, Is...> : seq<Is...>{};
template<typename Func, size_t... Is>
constexpr array<float, sizeof...(Is)> make_coeffs(Func f, seq<Is...>) {
return array<float, sizeof...(Is)>{ f(Is)... };
}
constexpr float square(float x) { return x * x; }
int main() {
constexpr auto coeffs = make_coeffs(square, gen_seq<10>{});
static_assert(coeffs[3] == 9, "");
for (float x : coeffs) {
cout << x << " ";
}
cout << endl;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8c2l6ZV90Li4uIElzPiBzdHJ1Y3Qgc2VxIHt9Owp0ZW1wbGF0ZTxzaXplX3QgTiwgc2l6ZV90Li4uIElzPiBzdHJ1Y3QgZ2VuX3NlcSA6IGdlbl9zZXE8TiAtIDEsIE4gLSAxLCBJcy4uLj4ge307CnRlbXBsYXRlIDxzaXplX3QuLi4gSXM+IHN0cnVjdCBnZW5fc2VxPDAsIElzLi4uPiA6IHNlcTxJcy4uLj57fTsKCnRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHNpemVfdC4uLiBJcz4KY29uc3RleHByIGFycmF5PGZsb2F0LCBzaXplb2YuLi4oSXMpPiBtYWtlX2NvZWZmcyhGdW5jIGYsIHNlcTxJcy4uLj4pIHsKICAgIHJldHVybiBhcnJheTxmbG9hdCwgc2l6ZW9mLi4uKElzKT57IGYoSXMpLi4uIH07Cn0KCmNvbnN0ZXhwciBmbG9hdCBzcXVhcmUoZmxvYXQgeCkgeyByZXR1cm4geCAqIHg7IH0KCmludCBtYWluKCkgewogICAgY29uc3RleHByIGF1dG8gY29lZmZzID0gbWFrZV9jb2VmZnMoc3F1YXJlLCBnZW5fc2VxPDEwPnt9KTsKCXN0YXRpY19hc3NlcnQoY29lZmZzWzNdID09IDksICIiKTsKICAgIGZvciAoZmxvYXQgeCA6IGNvZWZmcykgewogICAgICAgIGNvdXQgPDwgeCA8PCAiICI7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0K