CD
{и
::z = std::move(x);
}
{
auto y = std::move(x);
::z = std::move(y);
}
Теперь описание его выглядит так
Предусловие: x = std::move(y) возможно; y = std::move(x) возможно; для T определен movector
Постусловие: x как будто выполнено x = std::move(y); y как будто выполнено y = std::move(x);
Пруф что в коде все как надо существенно завязано на два указанных выше свойства