std::is_pod
вероятно, будет устаревшим в C ++ 20.
В чем причина такого выбора? Что мне следует использовать вместо того, std::is_pod
чтобы знать, действительно ли тип является POD?
c++
typetraits
скайпджек
источник
источник
static_assert
того, чтобы никто не трогал структуры, которые должны использоваться совместно с кодом C.Ответы:
POD заменяется двумя категориями, которые дают больше нюансов. На стандартном собрании C ++ в ноябре 2017 года об этом говорилось следующее:
Для простых типов данных используйте
is_standard_layout
функцию, для тривиальных типов данных (таких как простые структуры) используйтеis_trivial
функцию.источник
remove_cvref
с одной стороны, что это составная черта, а с другой стороны они удаляют другие составные черты? Это кажется безумным. :-)std::is_pod<T>{} == (std::is_trivial<T>{} && std::is_standard_layout<T>{})
?std::is_pod
,std::is_trivia
иstd::is_standard_layout
время компиляции? Потому что в алгоритмах вы можете пожелать более быстрый алгоритм с использованием memcpy () и т.д., если совместим с C-layout.