Ответ 1
Прежде всего, посмотрите параметры шаблона: 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. Расширение пакета состоит из шаблона и эллипсиса, экземпляр которого производит ноль или более экземпляров шаблона в списке [...].