В type_traits вы можете проверить, является ли класс тривиальным, легко копируемым / перемещаемым / конструируемым.
Какой смысл знать, если это так? Нужно ли знать, можно ли преформировать поэлементную копию по сравнению с побитовой копией? По сути, почему знание того, что класс тривиально, полезно?
Имея тривиальный класс, вы можете просто скопировать объект в память. Если объект использует, например, 32 байта, вы берете эти байты и копируете в другое место. У вас есть два одинаковых объекта, которые можно использовать. Когда у вас есть нетривиальный класс, вы не можете быть уверены, что скопируете, у вас все еще есть пригодный для использования объект. Если это нетривиально, вы не можете быть уверены, можно ли скопировать объект таким образом (класс может иметь какой-то обработчик, например строку, и у вас будет два объекта, которые указывают на одни данные). Кроме того, если ваш класс тоже
std::is_standard_layout
тогда вы можете использовать этот объект в программах на C.
Одна из причин заключается в том, что это неуказанное (может быть неопределенным) поведение для объектов memcpy, которые нельзя тривиально скопировать.