以下代码编译:
template<int...>
struct Indices {};
template<int J, int ...I>
void foo(Indices<I...>) {}
int main(int argc, char **argv)
{
foo<2>(Indices<3,4,5>()); //why does this work?
return 0;
}
在函数调用中,在我看来,J参数变成2了,...I参数变成了3,4,5?
但为什么这行得通?我只指定2了我指定为和什么都没有的foo<2>含义。为什么我仍然可以通过参数指定?这里使用的是什么模板机制?J2...I...IIndices
更新:当前的答案没有解释为什么我可以不推导出一个论点(明确指定)但推断出其他论点。这究竟什么时候起作用?我希望我不依赖未定义的行为。标准是否允许我在上面做的事情?