2012-03-06 13 views
9

Przebiegłem poniżej z g++ -std=c++0x pod_test.cpp na g ++ 4.6.2 (mingw). Wystąpił błąd na A4. Dlaczego nie ma formatu A4 POD?Dlaczego nie jest to typ 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(){} 

Odpowiedz

16

To nie POD ponieważ łamie tę zasadę do standardowych klas układ:

- albo nie ma non-statyczne członków danych w klasie najbardziej pochodnych i co najwyżej jednej klasy bazowej z nie- statyczne członkowie danych lub nie ma baza zajęcia z non-statycznych pól

Tylko jedna klasa w kratę spadków może mieć non-statyczne członków danych. W tym przypadku oba mają i A4.

+0

Istnieje maksymalnie jedna klasa bazowa z niestatycznymi elementami danych. We wszystkich przykładach. W jaki sposób stosuje się tę zasadę? – Mordachai

+1

"nie ma niestatycznych elementów danych w najbardziej pochodnej klasie ** i ** najwyżej jednej klasy bazowej z niestatycznymi elementami danych". "A4" ma niestatyczne elementy danych. –

+0

Myślę, że powiązałem to z tobą. Pamiętam jego sekty 7 -lookups-ok 9.0.7. Akceptuj, kiedy mogę. Przeoczyłem "przed" lub. Nic dziwnego, że "albo" nie miało sensu. –

Powiązane problemy