C++14で導入された変数テンプレートは再帰的に使えます
# include <iostream>
template <std::size_t N> constexpr std::size_t fact = fact<N - 1> *N;
template <> constexpr std::size_t fact<1> = 1;
int main(int argc, char const *argv[]) {
std::cout << fact<10> << std::endl;
return 0;
}
つまりこれだけでコンパイル時に階乗が計算できます。
clang3.5で動いた
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ: