首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSVC12认为从std::array派生的聚合不是pod

MSVC12认为从std::array派生的聚合不是pod
EN

Stack Overflow用户
提问于 2014-01-07 09:37:09
回答 1查看 312关注 0票数 8

考虑到以下情况

代码语言:javascript
复制
#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)坚持认为第二个断言失败。

  1. 谁是对的?
  2. 有什么办法让MSVC把这类人当成豆荚吗?

编辑以获取信息:is_trivially_copyable<litmus>在MSVC上返回真值。这可能是有用的,在许多情况下,实际的POD-度并不是严格要求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-07 09:54:49

  1. GCC和Clang,那个班是POD。
  2. 这取决于“让MSVC将类视为pod”的确切含义。如果你指的是编译器内部,那就不是。但是,您可以(在实践中)专门研究litmus的特性: 命名空间std {模板<>结构is_pod : std::true_type {};} 请注意,严格按照标准,这会给出未定义的行为(感谢@R.MartinhoFernandes指出这一点)。然而,作为一个特定于编译器的解决方案,我希望它能起作用。使用时不作任何保证。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20968200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档