#include <iostream>
#include <array>
// Шаблонная структура для вычисления арифметической прогрессии
template<typename T, T Start, T Difference, size_t Index>
struct ArithmeticProgression
{
static constexpr T value = Start + Index * Difference;
};
// Рекурсивная структура для генерации массива
template<typename T, T Start, T Difference, size_t... Indices>
constexpr std::array<T, sizeof...(Indices)> generateProgression(std::index_sequence<Indices...>)
{
return { ArithmeticProgression<T, Start, Difference, Indices>::value... };
}
// Основной шаблон функции для вычисления прогрессии
template<typename T, T Start, T Difference, size_t Count>
constexpr auto makeArithmeticProgression()
{
return generateProgression<T, Start, Difference>(std::make_index_sequence<Count>{});
}
int main()
{
// Генерация арифметической прогрессии во время компиляции
constexpr auto progression = makeArithmeticProgression<int, 1, 2, 10>();
// Вывод результата
std::cout << "Arithmetic progression: ";
for (auto num : progression)
std::cout << num << " ";
std::cout << std::endl;
return 0;
}