#include <array>
#include <utility>
#include <iostream>
const int N = 5;
struct A
{
int x;
A(int x) : x(x) { std::cout << "Created" << std::endl; }
A(const A& rhs) : x(rhs.x) { std::cout << "Copied" << std::endl; }
// A(const A& rhs) = delete;
};
int makeElement(size_t i)
{
return i * i;
}
template<size_t... Inds>
std::array<A, sizeof...(Inds)> makeArrayImpl(std::integer_sequence<size_t, Inds...>)
{
return { makeElement(Inds)... };
}
std::array<A, N> makeArray()
{
return makeArrayImpl(std::make_index_sequence<N>{});
}
int main()
{
const std::array<A, N> arr = makeArray();
for (const auto& item : arr)
{
std::cout << item.x << std::endl;
}
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3QgaW50IE4gPSA1OwoKc3RydWN0IEEKewogIGludCB4OwogIEEoaW50IHgpIDogeCh4KSB7IHN0ZDo6Y291dCA8PCAiQ3JlYXRlZCIgPDwgc3RkOjplbmRsOyB9CiAgQShjb25zdCBBJiByaHMpIDogeChyaHMueCkgeyBzdGQ6OmNvdXQgPDwgIkNvcGllZCIgPDwgc3RkOjplbmRsOyB9Ci8vICBBKGNvbnN0IEEmIHJocykgPSBkZWxldGU7Cn07CgppbnQgbWFrZUVsZW1lbnQoc2l6ZV90IGkpCnsKICByZXR1cm4gaSAqIGk7Cn0KCnRlbXBsYXRlPHNpemVfdC4uLiBJbmRzPgpzdGQ6OmFycmF5PEEsIHNpemVvZi4uLihJbmRzKT4gbWFrZUFycmF5SW1wbChzdGQ6OmludGVnZXJfc2VxdWVuY2U8c2l6ZV90LCBJbmRzLi4uPikKewogIHJldHVybiB7IG1ha2VFbGVtZW50KEluZHMpLi4uIH07Cn0KCnN0ZDo6YXJyYXk8QSwgTj4gbWFrZUFycmF5KCkKewogIHJldHVybiBtYWtlQXJyYXlJbXBsKHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPnt9KTsKfQoKaW50IG1haW4oKSAKewogIGNvbnN0IHN0ZDo6YXJyYXk8QSwgTj4gYXJyID0gbWFrZUFycmF5KCk7CgogIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGFycikKICB7CiAgICBzdGQ6OmNvdXQgPDwgaXRlbS54IDw8IHN0ZDo6ZW5kbDsgICAgCiAgfQp9Cg==