私はstd::vector<Foo>
を持っています。Foo
はFoo(Foo&&) noexcept
を含むクラスです。std :: vector :: erase()は移動したくない
オブジェクトをコンテナに追加するのは完璧ですが、std::vector::erase(iterator)
を使用してオブジェクトを消去しても、GCC 4.7は削除した代入演算子を呼び出そうとします。正確なエラーメッセージは次のとおりです。
エラー:削除された機能の使用「foobarの& FOOBAR ::演算子=(定数FooBarの&)
編集:代入演算子、ないコピーを呼び出しstd::vector
もちろんコンストラクタ(エラーメッセージでもそれを見ることができます)。説明でそれを修正しました、申し訳ありません。
要求されるようにここでは例のソースコードは次のとおりです。
#include <vector>
class Foo {
public:
Foo() {}
Foo(Foo&& other) noexcept {}
Foo(const Foo&) = delete;
Foo& operator=(const Foo&) = delete;
};
int main() {
std::vector<Foo> v;
v.push_back(Foo{});
v.erase(v.begin());
}
デモコードはありますか? – kennytm
コードがないと、問題の内容を確認するのが難しい – sehe
ソースコードが追加されました。 :-) – stschindler