La norme définit-elle précisément ce que je peux faire avec un objet une fois qu'il a été déplacé ? J'avais l'habitude de penser que tout ce que l'on pouvait faire avec un objet déplacé était de le détruire, mais cela ne serait pas suffisant.
Par exemple, prenons le modèle de fonction swap
comme défini dans la bibliothèque standard :
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
Il est évident qu'il doit être possible d'assigner des objets "moved-from", sinon les lignes 2 et 3 échoueraient. Alors, que puis-je faire d'autre avec les objets "moved-from" ? Où puis-je trouver ces détails dans la norme ?
(Au fait, pourquoi est-ce que T c = std::move(a);
au lieu de T c(std::move(a));
dans la ligne 1)