鉴于以下
#include <array>
struct litmus final : std::array<unsigned char, 16>
{
};
static_assert(std::is_pod<std::array<unsigned char, 16> >::value, "not pod");
// this fails on MSVC:
static_assert(std::is_pod<litmus>::value, "not pod");
以下编译器同意这litmus
是 pod:
- clang++ 3.5 版(主干 198621)http://coliru.stacked-crooked.com/a/7add7a2fe58a7e38
- g++ 4.8.1 http://coliru.stacked-crooked.com/a/74cfe97f06c8c128
但是,MSVC12 (VS2013 RTM) 坚持认为第二个断言失败。
- 谁是对的?
- 有什么技巧可以让 MSVC 将类视为 pod?
编辑有关信息:
is_trivially_copyable<litmus>
在 MSVC 上返回真实性。这对于不严格要求实际 POD 的许多情况可能很有用。