std::is_pod
sera probablement obsolète en C ++ 20.
Quelle est la raison de ce choix? Que dois-je utiliser à la place de std::is_pod
savoir si un type est en fait un POD?
c++
typetraits
skypjack
la source
la source
static_assert
m'assurer que personne ne touche aux structures qui devraient être partagées avec le code C.Réponses:
Le POD est remplacé par deux catégories qui donnent plus de nuances. La réunion de la norme C ++ en novembre 2017 avait ceci à dire à ce sujet:
Pour les types de données simples, utilisez la
is_standard_layout
fonction, pour les types de données triviaux (tels que les structures simples), utilisez lais_trivial
fonction.la source
remove_cvref
d'un côté, c'est un trait composé, tandis que de l'autre côté ils enlèvent d'autres traits composés? Cela semble insensé. :-)std::is_pod<T>{} == (std::is_trivial<T>{} && std::is_standard_layout<T>{})
?std::is_pod
,std::is_trivia
et lastd::is_standard_layout
compilation? Parce que dans les algorithmes, vous pourriez souhaiter un algorithme plus rapide utilisant memcpy () etc. si C-layout est compatible.