Я пытаюсь сортировать вектор, содержащий объекты, которые не являются конструктивными или по умолчанию конструктивными (но являются конструктивными), но я получаю ошибки в том, что компилятор не может найти действительную функцию для swap
. Я думал, что достаточно иметь конструктор движений. Что мне здесь не хватает?Как я могу использовать std :: sort с объектами, у которых нет конструктора копирования?
class MyType {
public:
MyType(bool a) {}
MyType(const MyType& that) = delete;
MyType(MyType&& that) = default;
};
int main(void) {
vector<MyType> v;
v.emplace_back(true);
sort(v.begin(), v.end(), [](MyType const& l, MyType const& r) {
return true;
});
}
В соответствии с cppreference, 'std :: sort' требует, чтобы тип был перемещаемым конструктивным * и * move assignable. – chris
@chris Да, я разъяснил ответ, спасибо. – vsoftco
Пятно на. Элементы не могут быть перемещены, потому что все они уже существуют; они должны перемещаться _assigned_, чтобы менять свои значения. –