In C ++ 20, il concetto di POD è deprecato, presumibilmente perché è un tratto composito insignificante di essere banale e layout standard.
Non corretto. Il termine POD è deprecato perché non conta più :
Il termine POD non ha più uno scopo nella norma, è semplicemente definito e si applicano restrizioni quando alcuni altri tipi conservano questa proprietà vestigiale.
In sostanza, un tipo che è sia layout banale che standard non acquisisce alcuna capacità al di là di ciò che l'essere banale e il layout standard forniscono da soli. La combinazione dei due non rende speciale il tipo e le due proprietà non hanno molto a che fare l'una con l'altra.
Il layout standard riguarda il layout dei suoi oggetti secondari non vuoti ben definiti (così come i suoi oggetti secondari di classe base vuoti non disturbano il layout del tipo). La Trivialità riguarda se l'oggetto ha qualche significato oltre il blocco di bit che memorizza (e se è concettualmente un oggetto valido se viene inizializzato con un blocco arbitrario di bit).
Se sto realizzando un modello che accetta un tipo T
e voglio vedere se posso memcpy
oggetti di quel tipo, non mi interessa il layout dei suoi membri; Voglio sapere se è TriviallyCopyable. Allo stesso modo, la correttezza di offsetof
non importa minimamente se la classe ha un costruttore di copie fornito dall'utente. Tutto ciò che importa è se il layout degli oggetti secondari dei membri avviene in un ordine chiaro e standardizzato.
Fondamentalmente, le persone si sono guardate intorno e hanno capito che non è rimasto nulla in C ++ che necessiti specificamente dell'intersezione di banalità e layout standard. Quindi non abbiamo bisogno di riservare un termine per questo. Quei pochi posti in cui lo standard afferma espressamente che un tipo sarà "POD" può semplicemente essere sostituito da "layout banale e standard", a seconda dei casi.
Questo requisito ricorsivo è ridondante?
Poiché entrambi i requisiti costituenti sono ricorsivi individualmente, anche l'intersezione dei due è ricorsiva. Quindi non è necessario dichiarare esplicitamente che tutti gli oggetti secondari sono anche POD. Questo è stato più che probabilmente solo un caso di una stranezza di copia e incolla, in cui la definizione originale diceva qualcosa come "tutti i membri di dati non statici devono essere tipi POD" e hanno semplicemente mantenuto tale affermazione così com'è.