Originariamente inviato da shodan
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.
Quindi non posso lasciarle tutte e quattro? (Il costruttore di copia, il costruttore di spostamento, l'operatore di affezione e l'operatore "di spostamento".)

Comunque il range-based for l'ho già corretto: mi sono accorto che non era il modo giusto di utilizzarlo!