次のコードがコンパイルされます。
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 つの引数を推定せず (明示的に指定)、他の引数を推定できる理由が説明されていません。これは正確にいつ機能しますか?未定義の動作に依存していないことを願っています。標準は、私が上で行っていることを許可していますか?