Означает ли тривиальное копирование тривиальное перемещение?C++

Программы на C++. Форум разработчиков
Anonymous
Означает ли тривиальное копирование тривиальное перемещение?

Сообщение Anonymous »

C++26 представит std::is_trivyly_relocatable_v, и автор предложения утверждает: Тривиально копируемое подразумевает тривиально перемещаемое.
Однако я думаю, что это утверждение не всегда может быть верным, особенно в случае, если член-указатель указывает на другой член того же объекта.
Рассмотрим следующий код:

Код: Выделить всё

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

Вернуться в «C++»