Я нашел решение сам. Поскольку размер известен во время компиляции, можно использовать std :: array, std :: get и std :: index_sequence. std :: get приводит к ошибке компиляции, если индекс выходит за пределы. Больше не требуется проверка во время выполнения.
template <typename... Ts>
constexpr void noop(Ts...) noexcept {}
template <typename T, size_t N, size_t... I>
constexpr void increase(std::array<T, N>& data, std::index_sequence<I...>) noexcept
{
noop((std::get<I>(data) += 1)...);
}
template <typename T, size_t N>
constexpr void increase(std::array<T, N>& data) noexcept
{
increase(data, std::make_index_sequence<N>{});
}