如果我使用专业化编写编译时阶乘函数,则以下代码就足够了,并且将正确提供 120 作为结果fact1<5>()
:
template <size_t N>
constexpr size_t fact1() { return N*fact1<N-1>(); }
template <>
constexpr size_t fact1<0>() { return 1; }
但是,对于单个函数体和三元运算符,如下面的代码所示,G++ 4.7 和 Clang++ 3.2 都超过了它们的最大模板实例化深度。似乎1
永远不会从fact2
. 为什么这个定义fact2<5>()
不返回 120?
template <size_t N>
constexpr size_t fact2() { return N==0 ? 1 : N*fact2<N-1>(); }