2013-02-19 22 views
7

il seguente codicePOD in Visual Studio 2008

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

template<typename T> 
void is_pod(char* c) 
{ 
    cout << "Type " << c; 
    if(std::is_pod<T>::value) 
     ::std::cout << " is POD" << endl; 
    else 
     ::std::cout << " is not!" << endl; 
} 

#define CHECK_TYPE(ty) ::is_pod<ty>(#ty) 

struct POD_Parent{}; 
struct POD_Child : public POD_Parent{int y;}; 
struct POD_Child2 {int x; POD_Parent y; POD_Child ssd;}; 

int main() 
{ 
    CHECK_TYPE(POD_Parent); 
    CHECK_TYPE(POD_Child); 
    CHECK_TYPE(POD_Child2); 

dà i seguenti risultati: il che è strano!

Type POD_Parent is POD 
Type POD_Child is not! 
Type POD_Child2 is POD 

In che modo POD_Child non è POD ?! e POD_Child2 è POD? !!

Nota che l'ho compilato usando MinGW (usando l'opzione -std = C++ 11) e ho detto che tutti sono POD.

+0

dispiace non ho visto come un POD_Child membro di POD_Child2, ho cancellato la risposta perché non era corretta :) –

+1

[Le cose sono cambiate (un po ') dal 2008] (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods -e-come-perché-sono-loro-speciali/7189821 # 7189821), e il vecchio compilatore probabilmente ha appena sbagliato. –

+0

Ho ottenuto lo stesso risultato in VC2010 nel 2008. – user93353

risposta

0

Secondo [MSDN][1] un tipo che ha una classe di base non è così PODPOD_Child non è POD ma per la sua POD_Child2 forse qualche errore del compilatore che ignorano classe base di ssd