以下代码编译:
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>
含义。为什么我仍然可以通过参数指定?这里使用的是什么模板机制?J
2
...I
...I
Indices
更新:当前的答案没有解释为什么我可以不推导出一个论点(明确指定)但推断出其他论点。这究竟什么时候起作用?我希望我不依赖未定义的行为。标准是否允许我在上面做的事情?