Kilku panów to widzę dało widzę pobieżne odpowiedzi więc przygotowałem coś co faktycznie ci się do czegoś przyda.
Jak widzisz w tej implementacji w łatwy sposób możesz również zmienić kierunek liczb, wartości i dzielnik który ma zostać wyłączony. Mam nadzieję, że uznasz tą odpowiedź za wystarczającą. Przepraszam, iż to rozwiązanie jest takie trywialne ale wydajesz być się początkującym programistą więc nie chciałem cię przytłaczać nadmiarem informacji. Gdybyś miał pytania to pisz śmiało : )
#include <iostream>
#include <utility>
namespace Impl
{
template<size_t start, size_t end, size_t offset, size_t divide_exclude, size_t result, size_t... seq>
struct num_list
: num_list<start + offset, end, offset, divide_exclude, (start + offset) % divide_exclude, seq..., start> {};
template<size_t start, size_t end, size_t offset, size_t divide_exclude, size_t... seq>
struct num_list<start, end, offset, divide_exclude, 0u, seq...>
: num_list<start + offset, end, offset, divide_exclude, (start + offset) % divide_exclude, seq...> {};
template<size_t end, size_t offset, size_t divide_exclude, size_t result, size_t... seq>
struct num_list<end, end, offset, divide_exclude, result, seq...>
: std::index_sequence<seq..., end> {};
template<size_t end, size_t offset, size_t divide_exclude, size_t... seq>
struct num_list<end, end, offset, divide_exclude, 0u, seq...>
: std::index_sequence<seq...> {};
}
template<size_t start, size_t end, size_t offset, size_t divide_exclude>
struct num_list : Impl::num_list<start, end, offset, divide_exclude, start % divide_exclude>{
static_assert(divide_exclude != 0u);
};
template<typename I, I...Is>
void print_sequence(std::integer_sequence<I, Is...>){
((std::cout << Is << " "), ...);
}
int main()
{
constexpr int start = 100;
constexpr int end = 0;
constexpr int delta = -1;
constexpr int divid = 0;
print_sequence(num_list<start, end, delta, divid>{});
}