O que posso fazer com um objeto movido de

O padrão define com precisão o que posso fazer com um objeto depois que ele foi movido? Eu costumava pensar que tudo que você pode fazer com um objeto movido é destruí-lo, mas isso não seria suficient

Por exemplo, considere o modelo de funçãoswap conforme definido na biblioteca padrão:

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!
}

Obviamente, deve ser possível atribuir a objetos movidos, caso contrário as linhas 2 e 3 falharão. Então, o que mais posso fazer com objetos movidos de? Onde exatamente posso encontrar esses detalhes no padrão?

(A propósito, por que éT c = std::move(a); ao invés deT c(std::move(a)); na linha 1?)

questionAnswers(2)

yourAnswerToTheQuestion