次のコード スニペットを検討してください。
void Foo(std::string str1, std::string str2) {}
template<typename... Types>
void Bar()
{
Foo(Types{}...); // wont compile
}
Bar<std::string, std::string>();
ここでやりたいことは、デフォルトでメソッドstd::string
内に 2 つのオブジェクトを構築Bar
し、それらを に渡すことFoo
です。しかし、私の無駄な試み(そのうちの1つはスニペットにあります)はコンパイルできないので、これが可能かどうか疑問に思っています。
VC 2013 でコンパイルしたところ、コンパイラ エラーが発生しました。コメントに記載されているように、他のコンパイラはそれを処理できます。上記のスニペットが標準に準拠しているかどうかは誰にもわかりますか?