Бесконечная компиляция с шаблонами

Этот вопрос просто из любопытства. В рекурсивных шаблонах, если мы забудем указать одну конкретную специализацию, компилятор выполнит большое количество итераций, а затем остановится в какой-то момент и выдаст ошибку, например,

error: incomplete type ‘X<-0x000000000000001ca>’ used in nested name specifier

В некоторых случаях компиляция идет бесконечно . Например, см. Приведенный ниже код (только для иллюстрации; скомпилирован с помощью gcc 4.4.1):

template<int I>
struct Infinite
{
  enum { value = (I & 0x1)? Infinite<I+1>::value : Infinite<I-1>::value };
};

int main ()
{
  int i = Infinite<1>::value;
}

Разве компилятор не должен быть достаточно умным, чтобы остановиться в какой-то момент?

Изменить : Показанная выше ошибка компиляции предназначена для другой код. Для примера кода компиляция никогда не останавливается (однако я могу видеть такие ошибки между ними)

5
задан iammilind 21 May 2011 в 04:32
поделиться