Я предполагаю, что с gcc (и с расширением g ++) максимальная глубина рекурсии шаблона по умолчанию равна 500
, так как по крайней мере на моей машине мне удалось воспроизвести ваши проблемы с (немного лучше) предупреждением. Компиляция loop<500>::sum
работала нормально, но попытка скомпилировать loop<501>::sum
не удалась.
Если вы используете gcc (или g ++), решение состоит в том, чтобы скомпилировать его с -ftemplate-depth-##
(где ## - максимально допустимая глубина).
Например, для компиляции main.cpp
с максимальной глубиной рекурсии шаблона 2000
g++ -ftemplate-depth-2000 main.cpp
Или преобразовать код в это:
template < int b >
struct loop {
enum { sum = (b*(b+1))/2 };
};
(но я признаю, что приведенный выше код не поможет вам узнать о метапрограммировании шаблонов)