J>>Ну да, но только если заинлайнится.
J>>А в случае шаблона это произойдет в любом случае.
W>Даже это не всегда бывает. Функция может быть встроена, а константы у компилятора не схлопнутся.
W>Вот небольшой пример по вычислению обратного числа в полукольце вычетов. Все три компилятора (gcc, clang, icc) разных версий (там в интерфейсе можно выбирать) успешно встраивают значение, но вычислить его ни у одного не получается. А вот в варианте с шаблонами у всех всё схлопывается до константы.
Ну так рекурсия же. Я не могу это так вот просто преобразовать в цикл а потом развернуть, а компилятор — и подавно. Может если бы там был императивный цикл а не рекурсия, то все бы у компилятора получилось.