Рекурсия времени компиляции и условные выражения

Я читал ответы на «Печать с 1 по 1000 без цикла или условий» , и мне интересно, почему необходимо иметь специальный случай для NumberGeneration в верхний ответ.

Если я удалю это и добавлю проверку на N == 1 в шаблоне (код ниже), код не будет скомпилирован с «глубиной создания экземпляра шаблона превышает максимум», но я не уверен, почему. По-разному обрабатываются ли условные выражения во время компиляции?

#include 

template
struct NumberGeneration
{
    static void out(std::ostream& os)
    {
        if (N == 1)
        {
            os << 1 << std::endl;
        }
        else
        {
            NumberGeneration::out(os);
            os << N << std::endl;
        }
    }
};

int main()
{
    NumberGeneration<1000>::out(std::cout);
}

9
задан Community 23 May 2017 в 11:56
поделиться