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

时间:2018-03-23 17:08:52

标签: c++ templates gcc

我有一个关于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;

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

1 个答案:

答案 0 :(得分:5)

A中包含A::B类型。

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

B b;添加到A,您的异常就会消失。