2012-03-06 16 views
9

Ejecuté lo siguiente con g++ -std=c++0x pod_test.cpp en g ++ 4.6.2 (mingw). Me sale un error en A4. ¿Por qué no es A4 POD?¿Por qué no es este un tipo de POD?

#include <iostream> 
#include <new> 
#include <cstring> 

using namespace std; 

struct A { 
    int a, b; 
    char c; 
}; 
struct A2 { 
    short buf[1]; 
}; 
struct A3:A { 
}; 
struct A4:A { 
    short buf[1]; 
}; 
static_assert(std::is_pod<A>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A2>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A3>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A4>::value, "Struct must be a POD type"); 

int main(){} 

Respuesta

16

No es POD porque rompe esta regla para las clases de diseño estándar:

- o bien tiene ningún miembro de datos no estáticos de la clase más derivada y en la mayoría de clase de una base con la no miembros de datos estáticos, o no tiene una base clases con miembros de datos no estáticos

sólo una clase en la red herencia puede tener miembros de datos no estáticos. En este caso, ambos tienen A y A4.

+0

hay como máximo una clase base con miembros de datos no estáticos. En todos los ejemplos. ¿Cómo se aplica esta regla? – Mordachai

+1

"no tiene miembros de datos no estáticos en la clase más derivada ** y ** como máximo una clase base con miembros de datos no estáticos". 'A4' tiene miembros de datos no estáticos. –

+0

Creo que te he vinculado eso. Recuerdo su secta 7 -lookups- ok 9.0.7. Acepta cuando pueda Pasé por alto el ',' antes del o. No es de extrañar por qué 'cualquiera' no tenía sentido. –

Cuestiones relacionadas