我有一个std::vector<Foo>
whereFoo
是一个包含Foo( Foo&& ) noexcept
.
将对象添加到容器中可以完美地工作,但是使用删除它们std::vector::erase( iterator )
却没有,GCC 4.7 尝试调用我已删除的赋值运算符。确切的错误信息是:
错误:使用已删除的函数 'Foobar& Foobar::operator=(const 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() );
}