次のコードがコンパイルされます。
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ここで使用されているテンプレート メカニズムは何ですか?
更新:現在の回答では、1 つの引数を推定せず (明示的に指定)、他の引数を推定できる理由が説明されていません。これは正確にいつ機能しますか?未定義の動作に依存していないことを願っています。標準は、私が上で行っていることを許可していますか?