std::is_pod
provavelmente será descontinuado no C ++ 20.
Qual é o motivo dessa escolha? O que devo usar no lugar de std::is_pod
para saber se um tipo é realmente um POD?
c++
typetraits
skypjack
fonte
fonte
static_assert
para garantir que ninguém toque em structs que devem ser compartilhados com o código C.Respostas:
POD está sendo substituído por duas categorias que fornecem mais nuances. A reunião padrão c ++ em novembro de 2017 tinha o seguinte a dizer sobre isso:
Para tipos de dados simples, use a
is_standard_layout
função, para tipos de dados triviais (como estruturas simples), use ais_trivial
função.fonte
remove_cvref
de um lado, que é um traço composto, enquanto do outro lado eles removem outros traços compostos? Parece loucura. :-)std::is_pod<T>{} == (std::is_trivial<T>{} && std::is_standard_layout<T>{})
?std::is_pod
,std::is_trivia
estd::is_standard_layout
em tempo de compilação? Porque em algoritmos, você pode desejar um algoritmo mais rápido usando memcpy () etc, se for compatível com o layout C.