CD
Reference implementation of relocate_at and uninitialized_relocate
template<class T>
T *relocate_at(T *source, T *dest)
{
if constexpr (std::is_trivially_relocatable_v<T>) {
std::memmove(dest, source, sizeof(T));
return std::launder(dest);
} else {
T *result = ::new (dest) (std::move(*source));
source->~T();
return result;
}
}
лол. так где там про деструктивный мув? :D