可変個引数テンプレート関数がありますf
。これは正常にコンパイルされます(を使用してg++ -std=c++11
、場合によってはを使用してc++0x
):
#include <tuple>
template<int ...>
struct seq { };
template <typename ...T, int ...S>
void f(std::tuple<T...> arg, seq<S...> s) {
// ... do stuff
}
int main() {
f<int>(std::tuple<int>(10), seq<0>());
return 0;
}
コンパイラは、動作するものを自動的に入力int ...S
します。
ただし、整数引数を手動で提供することはできないようです。
int main() {
f<int, 0>(std::tuple<int>(10), seq<0>());
return 0;
}
出力:
/tmp/t.cpp:関数内'int main()':/tmp/t.cpp:12:42:エラー:
'f(std :: tuple、seq <0>)'<の呼び出しに一致する関数がありませんbr> /tmp/t.cpp:12:42:注:候補は:/tmp/t.cpp:7:6:注:
template void f(std :: tuple <_TElements ...>、
seq)/ tmp /t.cpp:7:6:注:テンプレート引数の推定
/置換に失敗しました:
技術的には、テンプレート関数に提供される可変個引数テンプレートパラメータパックは1つだけである必要があることを読んだと思います(最初のケースでは、コンテキストによって完全に決定されます)。
デバッグのために、GCCに...S
tostderr
またはに使用される拡張を出力する方法はありstdout
ますか?最初にコンパイルしないときに、このようなものをデバッグするのに非常に役立ちます。