7

以下代码

#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);

给出以下结果: 这很奇怪!

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

POD_Child 怎么可能不是 POD?!而 POD_Child2 是 POD?!!

请注意,我使用 MinGW 编译它(使用选项 -std=c++11),它说它们都是 POD。

4

1 回答 1

0

根据[MSDN][1]具有基类的类型并非如此,POD而是因为编译器可能会忽略基类的一些错误POD_ChildPODPOD_Child2ssd

于 2013-02-19T16:58:19.680 回答