Я читал ответы на «Печать с 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);
}