#pragma once #include #include #include namespace ext { namespace detail { template constexpr auto make_array_n_impl(T && value, std::index_sequence) { return std::array, size>{ (static_cast(indexes), value)..., std::forward(value) }; } } template constexpr auto make_array_n(std::integral_constant, T &&) { return std::array, 0>{}; } template constexpr auto make_array_n(std::integral_constant, T && value) { return detail::make_array_n_impl(std::forward(value), std::make_index_sequence{}); } template constexpr auto make_array_n(T && value) { return make_array_n(std::integral_constant{}, std::forward(value)); } }