#include <iostream>
template <int N>
struct Factorial {
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0> {
enum { value = 1 };
};
int main()
{
auto const f10 = Factorial<10>::value; // done at compile-time
std::cout << f10 << "\n"; // prints 3628800
return 0;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCiAgICB0ZW1wbGF0ZSA8aW50IE4+CiAgICBzdHJ1Y3QgRmFjdG9yaWFsIHsKICAgICAgICBlbnVtIHsgdmFsdWUgPSBOICogRmFjdG9yaWFsPE4gLSAxPjo6dmFsdWUgfTsKICAgIH07CiAgICAgCiAgICB0ZW1wbGF0ZSA8PgogICAgc3RydWN0IEZhY3RvcmlhbDwwPiB7CiAgICAgICAgZW51bSB7IHZhbHVlID0gMSB9OwogICAgfTsKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgYXV0byBjb25zdCBmMTAgPSBGYWN0b3JpYWw8MTA+Ojp2YWx1ZTsgLy8gZG9uZSBhdCBjb21waWxlLXRpbWUKICAgICAgICBzdGQ6OmNvdXQgPDwgZjEwIDw8ICJcbiI7ICAgICAgICAgICAgICAvLyBwcmludHMgMzYyODgwMAoKICAgICAgICByZXR1cm4gMDsKICAgIH0=