No creo que se pueda hacer en términos sencillos, al menos sin un lote de explicación adicional. Un punto importante es la inicialización estática frente a la dinámica, pero explicando que para un lego sería varias páginas en sí mismo ...
Los POD se (mal) definieron en C++ 98. En realidad, hay dos intenciones distintas involucradas, ninguna de las dos expresadas muy bien: 1) que si compila una declaración de C struct en C++, lo que obtenga debería ser equivalente a lo que tenía en C. 2) Un POD solo necesitará/usará estática (no dinámica) inicialización.
C++ 0x/11 cae la designación "POD" (casi) completamente, a favor de "trivial" y "diseño estándar". El diseño estándar está destinado a capturar el primer intento: crear algo con un diseño igual al que obtendría en C. Trivial está destinado a capturar el soporte para la inicialización estática.
Desde new T
vs new T()
trata de inicialización, que probablemente quieren is_trivial
.
No estoy seguro de que se requiera la magia del compilador. Mi reacción inmediata sería probablemente sí, pero conociendo algunas de las cosas que las personas han hecho con TMP, me es difícil estar seguro de que alguien no podría hacer esto también ...
Editar: por ejemplo, tal vez sea mejor acaba de citar los ejemplos del N3290:
struct N { // neither trivial nor standard-layout
int i;
int j;
virtual ~N();
};
struct T { // trivial but not standard-layout
int i;
private:
int j;
};
struct SL { // standard-layout but not trivial
int i;
int j;
~SL();
};
struct POD { // both trivial and standard-layout
int i;
int j;
};
Como sin duda puede adivinar, POD
es también una estructura POD.
Creo que es un poco tarde para mencionar esto. Pero para las personas que buscan una respuesta elaborada detallada, aquí está el enlace. Verifique la respuesta de R Martinho Fernandes http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special/4178176#4178176 – jmishra