#include <iostream>
#include <initializer_list>
#include <array>
#include <tuple>
template<typename T, std::size_t N, std::size_t ...Ns>
std::array<T, N> make_array_impl(
std::initializer_list<T> t,
std::index_sequence<Ns...>)
{
return std::array<T, N>{ *(t.begin() + Ns) ... };
}
template<std::size_t N, typename T>
std::array<T, N> make_array(std::initializer_list<T> t) {
if(N > t.size())
throw std::out_of_range("that's crazy!");
return make_array_impl<T, N>(t, std::make_index_sequence<N>());
}
int main() {
constexpr std::initializer_list<int> il = { 1, 2, 3 };
auto std_array = make_array<il.size()>(il);
std::initializer_list<int> il2 = { 1, 2, 3 };
auto std_array2 = make_array<3>(il2);
for(auto &i : std_array)
std::cout << i << ", ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8dHVwbGU+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCBzdGQ6OnNpemVfdCAuLi5Ocz4Kc3RkOjphcnJheTxULCBOPiBtYWtlX2FycmF5X2ltcGwoCiAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gdCwKICAgIHN0ZDo6aW5kZXhfc2VxdWVuY2U8TnMuLi4+KSAKewogICAgcmV0dXJuIHN0ZDo6YXJyYXk8VCwgTj57ICoodC5iZWdpbigpICsgTnMpIC4uLiB9Owp9Cgp0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZSBUPgpzdGQ6OmFycmF5PFQsIE4+IG1ha2VfYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHQpIHsKICAgIGlmKE4gPiB0LnNpemUoKSkKICAgICAgIHRocm93IHN0ZDo6b3V0X29mX3JhbmdlKCJ0aGF0J3MgY3JhenkhIik7CiAgICByZXR1cm4gbWFrZV9hcnJheV9pbXBsPFQsIE4+KHQsIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPigpKTsKfQoKaW50IG1haW4oKSB7CgkKCWNvbnN0ZXhwciBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8aW50PiBpbCA9IHsgMSwgMiwgMyB9OwoJYXV0byBzdGRfYXJyYXkgPSBtYWtlX2FycmF5PGlsLnNpemUoKT4oaWwpOwoJCglzdGQ6OmluaXRpYWxpemVyX2xpc3Q8aW50PiBpbDIgPSB7IDEsIDIsIDMgfTsKCWF1dG8gc3RkX2FycmF5MiA9IG1ha2VfYXJyYXk8Mz4oaWwyKTsKCQoJZm9yKGF1dG8gJmkgOiBzdGRfYXJyYXkpCgkJc3RkOjpjb3V0IDw8IGkgPDwgIiwgIjsKCQoJcmV0dXJuIDA7Cn0=