I think that @Xeo's comment summed it up well. From 14.5.3 of the C++11 standard:
A pack expansion consists of a pattern and an ellipsis, the
instantiation of which produces zero or more instantiations of the
pattern in a list.
In your case, by the time you finish with the recursive template instantiation and end up in the partial specialization, you have
f(std::get<N>(std::forward<Tuple>(t))...);
...where N
is parameter pack of four int
s (0
, 1
, 2
, and 3
). From the standardese above, the pattern here is
std::get<N>(std::forward<Tuple>(t))
The application of the ...
ellipsis to the above pattern causes it to be expanded into four instantiations in list form, i.e.
f(std::get<0>(t), std::get<1>(t), std::get<2>(t), std::get<3>(t));
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…