1
のは、私は右辺値参照を取って、機能を持っているとしましょう:なぜstd :: bind'ed関数に移動する必要はありませんか?
void whatever (std::unique_ptr<int>&&) {
// Nothing!
}
...と私はプレースホルダにその一つのパラメータをバインドします。
auto f = std::bind(&whatever, _1);
私はこのような呼び出しを試みましたが、結果は私が期待していたものとは逆です。
std::unique_ptr<int> nothing;
f(std::move(nothing)); // Fails to compile!
f(nothing); // Works, but seems wrong!
これはコンパイラのバグですか?または、作業呼び出しが安全でないコードですか?それとも、私はバインドされた関数へのこのポインタstd::move
を持っている必要はありませんか?
gcc4.4でコンパイルエラーは、方法によって、次のとおりです。libc++を使用しているとき、私はちょうど逆の結果を得る
test.cxx:14: error: no match for call to '(std::_Bind<void (*(std::_Placeholder<1>))(std::unique_ptr<int, std::default_delete<int> >&&)>) (std::unique_ptr<int, std::default_delete<int> >)'
興味深い!私は、私が取り組んでいるより複雑なケースがあります。その結果は、周囲のコードのいくつかの副作用にも依存しているようです。 –
うん、GCC 4.7で修正されているようだ。 – Potatoswatter
ちなみに、[func.bind.bind]/p10/b3への参照はどのようにして見つけられますか?それはGoogleがうまくいきません。 –