Есть ли смысл при программировании на шаблонах применять хвостовую рекурсию?
Например, что лучше:
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 };
};
Даст ли второй подход меньшее потребление памяти и большую скорость компиляции?




