Ho uno std::vector<Foo>
dove Foo
è una classe contenente Foo(Foo&&) noexcept
.std :: vector :: erase() non si desidera spostare
L'aggiunta di oggetti al contenitore funziona in modo impeccabile, tuttavia non cancellandoli utilizzando std::vector::erase(iterator)
, GCC 4.7 tenta di chiamare l'operatore di assegnazione che ho eliminato. Il messaggio di errore esatto è:
errore: uso della funzione cancellato 'Foobar & Foobar :: operator = (const Foobar &)
Edit: Naturalmente std::vector
chiama l'operatore di assegnazione, non la copia costruttore (lo puoi vedere anche nel messaggio di errore). Risolto problema nella descrizione, mi dispiace.
Ecco esempio di codice sorgente come richiesto:
#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());
}
Hai qualche codice demo? – kennytm
Senza codice, è difficile capire quale sia il problema. Codice sorgente aggiunto. – sehe
. :-) – stschindler