Следующий код допустим в C ++ 11.
template<int... N>
std::tuple<decltype(N)...> f()
{
return std::make_tuple(7 + N...);
}
Что это значит?
Прежде всего, посмотрите на параметры шаблона: template <int ... N>
, Хотя переменное число аргументов шаблона может быть передано f
все они должны быть типа int
,
Теперь, когда вы используете f<t1, t2, ..., tn>
, распаковка параметров (7 + N...)
будет следовать шаблон 7 + N
и расширить до
7 + t1, 7 + t2, 7 + t3, ..., 7 + tn
Поэтому вы получите кортеж, который содержит каждый из ваших аргументов шаблона, увеличенный на семь. Подробности можно найти в разделе 14.5.3 Шаблоны Variadic [temp.variadic].
3. Расширение пакета состоит из шаблона и многоточия, создание которых приводит к нулю или большему количеству экземпляров шаблона в списке […].