Всегда ли безопасно std::memmove
между одними и теми же экземплярами объекта (включая подобъекты).
То есть следующий сейф для любого T
и любого t
, и он покинет t
без изменений:
template <typename T>
void maybe_copy(T& t) {
std::memmove(&t, &t, sizeof(T));
}
Как следствие, всегда ли безопасно следующее:
template <typename T>
void redundant_copy(T& s, const T& d) {
if (std::addressof(s) == std::addressof(d)) {
std::memmove(&d, &s, sizeof(T));
}
}