Определяет ли стандарт то, что я могу сделать с объектом после его перемещения? Я думал, что все, что вы можете сделать с перемещенным объектом, уничтожает его, но этого будет недостаточно.
Например, возьмите шаблон функции swap
, как определено в стандартной библиотеке:
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!
}
Очевидно, что должно быть возможно назначить перемещенные объекты, в противном случае строки 2 и 3 завершились бы неудачей. Итак, что еще я могу сделать с перемещенными объектами? Где именно я могу найти эти данные в стандарте?
(Кстати, почему он T c = std::move(a);
вместо T c(std::move(a));
в строке 1?)