Middle — Senior
69
Компиляторное вычисление факториала в шаблоне без static‑контекста
Условие задачи
Создан шаблонный метакласс Fac<N>, который позволяет вычислить факториал уже на этапе компиляции. Задача состоит в том, чтобы избавиться от использования static constexpr и реализовать расчёт через constexpr‑метод экземпляра класса.
template <unsigned N>
struct Fac {
constexpr int get() const {
return N * Fac<N - 1>().get();
}
};
template <>
struct Fac<0> {
constexpr int get() const {
return 1;
}
};
static_assert(Fac<5>().get() == 120);