Есть бесконечные циклы, как во время выполнения, однако, в отличие от времени выполнения, компилятор остановится после достаточного количества итераций. Вот пример:
#include <iostream>
template<int i>
struct loop {
// this will just keep referencing itself
static constexpr int val = loop<i + 1>::val;
};
int main() {
std::cout << loop<0>::val << std::endl;
}
Компилятор выдает следующее сообщение об ошибке:
fatal error: template instantiation depth exceeds maximum of 900