Есть ли смысл при программировании на шаблонах применять хвостовую рекурсию?
Например, что лучше:
template <int n>
struct Fac
{
enum { result = n * Fac<n - 1>::result };
};
template <>
struct Fac<0>
{
enum { result = 1 };
};
или
template <int n>
class TailFac
{
template <int counter, int mul>
struct TailFacIter
{
enum { value = TailFacIter<counter - 1, mul * counter>::value };
};
template <int mul>
struct TailFacIter<0, mul>
{
enum { value = mul };
};
public:
enum { result = TailFacIter<n - 1, n>::value };
};
Даст ли второй подход меньшее потребление памяти и большую скорость компиляции?