【发布时间】:2014-01-07 09:37:09
【问题描述】:
鉴于以下
#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 的情况可能很有用。
【问题讨论】:
-
FWIW 我查看了标准第 9 节中 standard-layout class 和 POD struct 的规范,我同意
litmus应该成为一个 POD。但是无法提供解决方法。 -
甚至不知道你可以这样使用'final',谢谢!
-
你可以专门化
std::is_pod为litmus以返回 true,假设你的用例实际上和这个例子一样简单。
标签: c++ visual-c++ static-assert