Tengo un std::vector<Foo>
donde Foo
es una clase que contiene Foo(Foo&&) noexcept
.std :: vector :: erase() no se quiere mover
Agregar objetos al contenedor funciona a la perfección, sin embargo borrarlos usando std::vector::erase(iterator)
no lo hace, GCC 4.7 intenta llamar al operador de asignación que he eliminado. El mensaje de error exacto es:
error: el uso de la función de borrado 'Foobar & Foobar operador :: = (const Foobar &)
Editar: Por supuesto std::vector
llama al operador de asignación, no la copia constructor (también se puede ver en el mensaje de error). Se corrigió en la descripción, lo siento.
Aquí es ejemplo de código fuente que solicitó:
#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());
}
¿Tiene algún código de demostración? – kennytm
Sin código, es difícil ver cuál es el problema – sehe
Código fuente agregado. :-) – stschindler