は、ここで私は、エラーを生成するサンプルコードです:std :: move()を使ってコピーできないオブジェクトをキャプチャすると、ラムダは移動できないのはなぜですか?
#include <functional>
using namespace std;
struct S {
S() = default;
S(const S&) = delete;
S(S&&) = default;
S& operator=(const S&) = delete;
S& operator=(S&&) = delete;
};
template <typename F>
void post(F&& func)
{
function<void()> f{forward<F>(func)};
}
int main()
{
S s;
post([s2 = move(s)] { });
}
main()
でラムダの内部では、私はstd::move()
を使用して、ローカル変数s
をキャプチャします。 post()を呼び出す前に、s2
は移動が正常に構築されている必要があります。
しかし、post()
の内部では、f
は、このラムダのタイプを基準にして構築することはできません。
削除した場合、s2 = move(s)
,f
はこの正の値のリファレンスで構成できます。
s2 = move(s)
を追加するとラムダが移動しないのはなぜですか?
ここでは、coliruを試してみるlinkです。
@LưuVĩnhPhúc、なぜ私の質問に嫌ったか教えてください。 –
私はそれが嫌いだと思いますか?文法ハイライトのタグをつけるだけです。 –
申し訳ありませんが、私は改訂履歴を誤解し、質問に-1を付けたと思いました。 –