4

どうやら、現在のMSVC2012RCのstd::thread実装のstd::threadには最大数の引数があります。

このコードは、MSVCとg++の両方で-std= c++0xを使用して正常にコンパイルされます。

std::thread t = std::thread(printf, "%d, %d, %d, %d", 1, 2, 3, 4);
t.join();

ただし、6つを超える引数の場合、MSVCはエラーを返します。

std::thread t = std::thread(printf, "%d, %d, %d, %d, %d", 1, 2, 3, 4, 5);
t.join();

エラーC2661:'std :: thread :: thread':オーバーロードされた関数は7つの引数を取りません

これはどういうわけか意図されていますか?または、MSVC実装のバグですか?MSVCで可変個引数テンプレートがまだサポートされていないためですか?

4

1 に答える 1

4

MSVC2010には可変個引数テンプレートがないため、プリプロセッサを使用して実装されます。

#defineサポートされる引数の数を設定するためにを設定できると思います。後で家に帰ったら、どちらかを確認できます。

編集

これは2012年版だと気づきました。VS接続のバグレポートで読むことができるように、それはまだ可変個引数テンプレートをサポートしていません。

于 2012-06-22T09:18:33.693 に答える