Кажется, что значения небезопасно копировать с помощью memcpy
, если только тип не является тривиально копируемым, т. е. не удовлетворяет признаку типа std::is_trivially_copyable
. Интересно, какова цель признаков типа std::is_trivially_copy_assignable
, std::is_trivially_copy_constructible
, std::is_trivially_move_assignable
и std::is_trivially_move_constructible
, если вы не можете использовать их для инициализации или назначения с помощью memcpy
. Разрешают ли они другие оптимизации?
Мне также интересно, почему стандарт требует тривиального деструктора для копирования значений с помощью memcpy
. (Тривиальный деструктор действительно упрощает физическое перемещение значения в памяти, но не кажется принципиально необходимым для простого дублирования значения с помощью memcpy
).