Здравствуйте, s_anatoli, Вы писали:
_>Посмотрите пример пионера метапрограммирования о пузырьковой сортировке.
Беда в том, что у компиляторов есть некая предельная глубина рекурсии в шаблонах. Поэтому выполнение цикла
template<int N> struct sum
{
enum { value = sum<N-1>::value + N };
};
template<> struct sum<0>
{
enum { value = 0 };
};
где-то для N=32 даст ошибку.
Так что, длинные циклы требуется разбивать, чтобы глубина рекурсии была, скажем, логарифмической
template<int N, int L> struct sum2
{
enum { value = sum2<N,L/2>::value + sum2<N+L/2,L-L/2>::value };
};
template<int N> struct sum2<N,0>
{
enum { value = 0 };
};
template<int N> struct sum2<N,1>
{
enum { value = N };
};
template<int N> struct sum
{
enum { value = sum<1,N>::value };
};