次のコード (関数パラメーター パックのネストされた展開を含む) が C++11 で許可されていることを誰かが確認できますか (標準への参照をいただければ幸いです)。
template<class ... VFTs> int variadic_fun(VFTs ... vfts) {
return sizeof ...(vfts);
}
template<int ... Ns> struct IntPack {
template<class ... MemTs> static int variadic_memfun(MemTs ... MemArgs) {
return variadic_fun(([=]() {
cout << "MemArgs = " << MemArgs << "\n";
cout << "Ns = " << Ns;
// Note the nested expansion of MemArgs here:
cout << "variadic_fun(MemArgs...) = " << variadic_fun(MemArgs ...) << "\n";
cout << "MemArgs[Ns] = " << MemArgs[Ns] << "\n";
return 0;
})()...);
}
};
int main() {
IntPack<0, 1, 2>::variadic_memfun("123", "ABC", "XYZ");
}
ありがとう!
PS誰かが以下に尋ねたので、このコードはジェネリックラムダを実装するclangの私のパッチで動作します(まだ標準のC ++ではなく、まだ提案にすぎません)-他のコンパイラで試したことはありません-最新のコンパイラで動作するかどうかはわかりません現在、clang トランク (おそらくそうです) - 変数とラムダを実装する主流のコンパイラのいずれかでコンパイルできるかどうかについての情報を歓迎します。