Шаблон Variadic Summing class

Попытка поиграть с вариационным шаблоном, но почему-то мой мозг онемел.

Я пытаюсь создать класс для суммирования переменных во время компиляции, но не могу корректно создать условие остановки. Я попытался сделать это следующим образом:.. но он не компилируется, не помогает никому?

#include <iostream>
#include <type_traits>
using namespace std;
template<size_t head,="" size_t="" ...rest="">
struct Sum
{
 static const size_t value = Head + Sum<rest...>::value;
 static void Print() { 
 cout << value;
 }
};
template<>
struct Sum
{
 static const size_t value = 0;
};
int _tmain(int argc, _TCHAR* argv[])
{
 Sum<5,5,5>::Print();
 return 0;
}
</rest...></size_t></type_traits></iostream>
1 ответ

Сначала нужно сначала объявить базовый шаблон. Вы только что объявили две специализации, которые вы использовали бы.

template<size_t...> struct Sum;
template<size_t head,="" size_t="" ...rest="">
struct Sum<head, rest...="">
{
 static const size_t value = Head + Sum<rest...>::value;
 static void Print() { 
 cout << value;
 }
};
template<>
struct Sum<>
{
 static const size_t value = 0;
};
</rest...></head,></size_t></size_t...>

licensed under cc by-sa 3.0 with attribution.