我有一个std::vector<Foo>地方Foo是含有类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() );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |