具有嵌套结构/类的POD-ness

ace*_*red 2 c++ gcc templates

我有一个关于POD-ness的问题.我预计如果B是非POD而B是A中的成员,那么A将是非POD.但是,下面的代码示例输出"10",因此B被正确地视为非POD但A是.

struct A
{
    int i;
    struct B
    {
        std::string s;
    };
};
std::cout << std::is_pod<A>::value;
std::cout << std::is_pod<A::B>::value;
Run Code Online (Sandbox Code Playgroud)

这是GCC中的错误吗?我正在使用"c ++(GCC)7.3.1 20180312".我没有看到这种行为的意义.假设我想优化缓冲区分配并使用POD检查以确定是否必须使用new或者可以将malloc/realloc用于特定类型.使用malloc为A分配存储是完全错误的.最好的问候

Yak*_*ont 5

A有一个类型A::B.

实例中A没有实例A::B.只有类型的定义,但没有实例化.

添加B b;A你的异常消失.