Вы также должны наследовать от Tuple<T2...>
template <class T, class... T2>
struct Tuple : public Tuple<T2...>
и инициализировать унаследованный класс в списке инициализации (до value
) [код предупреждения не проверен]
Tuple(T n, T2... re) : Tuple<T2...>{re...}, value{n}
{ }
Вам также нужна специализация наземного случая, чтобы остановить рекурсию
Что-то вроде
template <class T>
struct Tuple<T>
{
T value;
Tuple (T n) : value{n}
{ }
};
или также (возможно, проще)
template <>
struct Tuple<>
{ };
Но для этого второго решения,вы должны определить Tuple
как получающий ноль или более типов;может быть что-то следующее
template <typename...>
struct tuple
{ };
template <class T, class... T2>
struct Tuple<T, T2...> : public Tuple<T2...>
{
// ...
}
Таким образом, когда Tuple
получает хотя бы один тип, специализация выбирается;при получении нулевого типа только основная версия совпадает и служит наземным регистром.