У меня есть 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() );
}