Наличие вычислений во время компиляции, которые могут привести компиляторы в бесконечный цикл - PullRequest
0 голосов
/ 25 апреля 2020

Существует ли такой вид вычислений во время компиляции, который может привести компиляторы к бесконечному l oop?

Может ли бесконечный l oop не потреблять увеличение памяти? Или это может прекратиться из-за нехватки памяти.

1 Ответ

5 голосов
/ 25 апреля 2020

Есть бесконечные циклы, как во время выполнения, однако, в отличие от времени выполнения, компилятор остановится после достаточного количества итераций. Вот пример:

#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
...