#include <array>
#include <utility>
template<typename T, size_t N, size_t... I>
constexpr std::array<T, N+1> append_helper(const std::array<T, N>& arr, const T& elem, std::index_sequence<I...>)
{
return std::array<T, N+1>{ arr[I]..., elem };
}
template<typename T, size_t N>
constexpr std::array<T, N+1> append(const std::array<T, N>& arr, const T& elem)
{
return append_helper(arr, elem, std::make_index_sequence<N>{});
}
int main()
{
constexpr std::array<int, 3> a1{3, 2, 1};
constexpr auto a2 = append(a1, 0);
constexpr int i = a2[3];
return i;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8dXRpbGl0eT4KCgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTiwgc2l6ZV90Li4uIEk+CmNvbnN0ZXhwciBzdGQ6OmFycmF5PFQsIE4rMT4gYXBwZW5kX2hlbHBlcihjb25zdCBzdGQ6OmFycmF5PFQsIE4+JiBhcnIsIGNvbnN0IFQmIGVsZW0sIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SS4uLj4pCnsKICAgIHJldHVybiBzdGQ6OmFycmF5PFQsIE4rMT57IGFycltJXS4uLiwgZWxlbSB9Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KY29uc3RleHByIHN0ZDo6YXJyYXk8VCwgTisxPiBhcHBlbmQoY29uc3Qgc3RkOjphcnJheTxULCBOPiYgYXJyLCBjb25zdCBUJiBlbGVtKQp7CiAgICByZXR1cm4gYXBwZW5kX2hlbHBlcihhcnIsIGVsZW0sIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPnt9KTsKfQoKCmludCBtYWluKCkKewogICAgY29uc3RleHByIHN0ZDo6YXJyYXk8aW50LCAzPiBhMXszLCAyLCAxfTsKICAgIGNvbnN0ZXhwciBhdXRvIGEyID0gYXBwZW5kKGExLCAwKTsKICAgIGNvbnN0ZXhwciBpbnQgaSA9IGEyWzNdOwogICAgCiAgICByZXR1cm4gaTsKfQ==