Хотя об этом не просят, похоже, это требует решения во время компиляции:
template< int I >
struct increment { static const int result = I+1; };
std::cout << increment<41>::result << '\n';
Это struct
- это то, что называется мета-функцией. Да, это структура, но она используется (во время компиляции) как функция: вы вызываете ее, передаете параметр и получаете результат. Синтаксис смешной, но это потому, что на самом деле никто не планировал этого делать; возможность была обнаружена (более или менее) случайно.
Выполнение этого во время компиляции имеет то преимущество, что результатом является постоянная времени компиляции и может использоваться следующим образом:
int my_array[increment<7>::result]; // array of 7+1 ints
Конечно, определение такого массива - это нонсенс. Как и в алгоритмах времени выполнения, инкремент обычно является лишь одной операцией алгоритма, который вычисляет нечто более сложное.