我尝试用其他类型谓词来理解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?
答案 0 :(得分:4)
is_trivial
和is_standard_layout
的组合等于is_pod
,模拟了{{1}中某个类型特征未捕获的非静态成员的其他一些限制}。
the draft Standard的相关引用:
<强> [类] 强>
10 POD结构是一个非联合类,它既是普通类 和标准布局类,并且没有非静态数据成员 输入非POD结构,非POD联合(或此类型的数组)。 同样,POD联盟是一个既简单又简单的联盟 标准布局类,并且没有类型的非静态数据成员 非POD结构,非POD联合(或此类类型的数组)。一个POD类是 一个POD结构或POD联合的类。