Sto cercando di ordinare un vettore contenente oggetti che non sono costruibili con la copia o costruttibili di default (ma sono costruttibili nel movimento), ma ottengo errori sul fatto che il compilatore non riesce a trovare una funzione valida per swap
. Pensavo che avere un costruttore di movimento sarebbe stato sufficiente. Cosa mi manca qui?Come posso usare std :: sort con oggetti privi di costruttore di copia?
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;
});
}
In base a cppreference, 'std :: sort' richiede che il tipo da spostare sia costruibile * e * trasferibile. – chris
@chris Sì, ho chiarito la risposta, grazie. – vsoftco
Spot on. Gli elementi non possono essere spostati perché sono già tutti esistenti; devono essere spostati _assegnati_ per scambiare i loro valori intorno. –