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)
is_trivial
和 的组合is_standard_layout
等于is_pod
,对非静态成员的一些其他限制进行取模,这些限制未被 中的类型特征之一捕获<type_traits>
。
标准草案的相关引用:
[班级]
10 POD 结构是一个非联合类,它既是普通类 又是标准布局类,并且没有非 POD 结构、非 POD 联合(或此类类型的数组)类型的非静态数据成员。类似地,POD 联合是一个既是普通类又是标准布局类的联合,并且不具有非 POD 结构、非 POD 联合(或此类类型的数组)类型的非静态数据成员。POD 类是 POD 结构或 POD 联合的类。