#include <iostream>
#include <type_traits>

template<unsigned n, unsigned product = 1>
struct Factorial:
    std::conditional_t< n == 1, std::integral_constant<unsigned, product>,
    Factorial<n - 1, n * product>>
{};

int main() {
    std::cout << Factorial<10>::value << "\n";
}