use*_*370 4 c++ recursion templates constexpr c++11
如果我使用specialized编写一个编译时阶乘函数,下面的代码就足够了,并且正确地提供120作为结果fact1<5>():
template <size_t N>
constexpr size_t fact1() { return N*fact1<N-1>(); }
template <>
constexpr size_t fact1<0>() { return 1; }
Run Code Online (Sandbox Code Playgroud)
但是,对于单个函数体和三元运算符,如下面的代码所示,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>(); }
Run Code Online (Sandbox Code Playgroud)