Однако я думаю, что это утверждение не всегда может быть верным, особенно в случае, если член-указатель указывает на другой член того же объекта.
Рассмотрим следующий код:
Код: Выделить всё
struct A {
int n{};
int* pn{};
};
static_assert(std::is_trivially_copyable_v); // true
int main() {
auto a = A{};
a.n = 1;
a.pn = &a.n;
auto b = A{};
std::memcpy(&b, &a, sizeof(a));
// Now, b.pn points to a.n, rather than b.n.
// So, A should not be regarded as trivially relocatable.
}
Означает ли тривиальное копирование тривиальное перемещение?
Подробнее здесь: https://stackoverflow.com/questions/796 ... elocatable
Мобильная версия