С помощью шаблонов можно перенести часть нетривиальных расчетов на этап компиляции.
Вот пример

Я все больше и больше понимаю, что нихрена не знаю о шаблонах.