Мне кажется, проблема в коде вашего шаблона:
template<int count, function_t** f> class loop_t
{
public:
static inline void exec()
{
(*(*f))();
loop_t< count-1, f>::exec();
}
};
Обратите внимание, что вы создаете экземпляр этого внутреннего шаблона:
loop_t< count-1, f>::exec();
Проблема в том, что вы никогда не определяли частичную специализацию loop_t
, которая завершается, когда счетчик цикла достигает некоторого значения (скажем, нуля), и поэтому компилятор просто продолжает создавать все новые и новые версии loop_t
с нижним и нижним значениями count
, пока он не достигнет внутреннего предела и не сообщит об ошибке. Чтобы это исправить, вы должны ввести частичную специализацию loop_t
, чтобы остановить, когда счетчик достигнет некоторого значения (вероятно, нуля):
template<function_t** f> class loop_t<0, f>
{
public:
static inline void exec()
{
// Empty
}
};
Надеюсь, это поможет!