Оба компилятора передают std::is_trivially_copy_assignable_v<Value>
. Итак, в чем разница между типами с возможностью простого копирования и с возможностью простого копирования ?
Trivially-copy-assignable требует только операций с копирование-присваивание будет тривиальным. У вас может быть класс, который можно легко копировать, например, с нетривиальным деструктором или конструктором перемещения. Такой класс не будет тривиально скопирован .
Я думаю, что предупреждение правильное. Потому что деструктор Value
нетривиален. Значит ли это, что для использования std::memcpy
мы должны проверить как std::is_trivially_copy_assignable_v<Value>
, так и std::is_trivially_destructible_v<Value>
?
Я считаю, что вам нужно только проверить std::is_trivially_copyable_v<Value>
. Обе проверки не дают требуемой гарантии, поскольку ваш класс все еще может иметь, например, нетривиальный конструктор перемещения, и, следовательно, его нельзя будет легко копировать и, следовательно, нельзя будет использовать с memcpy
.