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

eba*_*und 7 layout pod type-traits c++11

我尝试用其他类型谓词来理解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?
Run Code Online (Sandbox Code Playgroud)

Tem*_*Rex 4

is_trivial和 的组合is_standard_layout等于is_pod,对非静态成员的一些其他限制进行取模,这些限制未被 中的类型特征之一捕获<type_traits>

标准草案的相关引用:

[班级]

10 POD 结构是一个非联合类,它既是普通类 又是标准布局类,并且没有非 POD 结构、非 POD 联合(或此类类型的数组)类型的非静态数据成员。类似地,POD 联合是一个既是普通类又是标准布局类的联合,并且不具有非 POD 结构、非 POD 联合(或此类类型的数组)类型的非静态数据成员。POD 类是 POD 结构或 POD 联合的类。

  • 瞧,这是一个简单的、标准布局的类,但不应该是 POD。不幸的是,clang++3.5 + libstdc++accept 是 POD,它似乎被破坏了:http://coliru.stacked-crooked.com/a/754a60347d0afc9f (4认同)