是否存在与std :: is_pod<>?对应的类型谓词的连接

时间:2014-01-12 13:00:44

标签: c++11 layout typetraits pod

我尝试用其他类型谓词来理解POD概念。

是否存在与std::is_pod<>对应的完整类型谓词列表?

这是我目前的尝试不成立(VS2013)。

struct C { // Does not assert as POD class
    int value;

    C() = default;

    C(int v) : value(v) { // Offends is_pod<>
    }
};

static_assert(std::is_trivial<C>::value, ""); // Assert OK
static_assert(std::is_trivially_copyable<C>::value, ""); // Assert OK
static_assert(std::is_standard_layout<C>::value, ""); // Assert OK
static_assert(std::is_pod<C>::value, "");  // Assert fails. Why?

1 个答案:

答案 0 :(得分:4)

is_trivialis_standard_layout的组合等于is_pod,模拟了{{1}中某个类型特征未捕获的非静态成员的其他一些限制}。

the draft Standard的相关引用:

<强> [类]

  

10 POD结构是一个非联合类,它既是普通类   和标准布局类,并且没有非静态数据成员   输入非POD结构,非POD联合(或此类型的数组)。   同样,POD联盟是一个既简单又简单的联盟   标准布局类,并且没有类型的非静态数据成员   非POD结构,非POD联合(或此类类型的数组)。一个POD类是   一个POD结构或POD联合的类。