Originariamente inviato da RooccoXXI
In pratica é l'argomento stesso che viene spostato?
E' il contenuto dell'argomento a essere spostato, ma poi quel contenuto è "annullato". Nel caso di un vector è possibile che venga effettuato un .resize(0);

Se scrivo
codice:
v1 = v2;
é come se invocassi la funzione
codice:
v1.operator=(v2);
e nel caso della move semantics v2 viene letteralmente spostato in v1 e quindi modificato? È per questo che devo togliere il const?
Grazie.
Così però non invochi la move semantics ma la copy semantics.
Corretto è:
codice:
v1 = std::move(v2);
v1.operator=(std::move(v2));
Se non espliciti l'operazione saranno invocati il copy constructor e l'assignment operator.
Le funzioni corrette sono:
codice:
template<typename T>
Vector<T>::Vector(Vector<T>&& V)
: v(std::move(V.v))
{
// opzionale perché ci pensa già il vector
   V.v.resize(0);
}

template<typename T>
Vector<T>& Vector<T>::operator=(Vector<T>&& V)
{
	if(&V != this)
	{
		v = std::move(V.v);
               // opzionale perché ci pensa già il vector
               V.v.resize(0);
	}
	return *this;
}
//////////////////////////////////////////////////////////////////////////////////////
codice:
template<typename T>
Vector<T> Vector<T>::operator-(const Vector<T>& V) const
{
	range_except(V, "");
	
	Vector<T> r(*this);
	
	for(auto i : v)               // ???
	{
		r.v[i] -= V.v[i];
	}
	
	return std::move(r);
}
Errare è umano, perseverare è diabolico.