J>Вообще, самое простое — это if:
J>J>template<int X>
J>void func(...) {
J> if (X>500) ...
J> else if (X>50) ...
J> else if (X>5) ...
J> else if (X>0) ...
J> else ...
J>}
J>
J>Поскольку X — константа времени компиляции, компилятор просто выкинет из результирующей функции все условия, которые, как он уже знает, точно не подходят.
Если сделать X простым параметром и передать в функцию константу то компилятор сделает то же самое (constant folding/propagation).