繁体   English   中英

为什么std :: atomic不仅仅是Visual C ++中的普通类型?

[英]Why std::atomic is not trivial type in only Visual C++?

Folly库要求std::atomic<hazptr_obj*>应该是一个普通的类型。 这适用于gcc和clang,但即使对于std::atomic<int>也无法使用Visual C ++。 为什么std::is_trivial返回false

#include <type_traits>
#include <atomic>

static_assert(
    std::is_trivial<std::atomic<int>>::value,
    "std::atomic<int> not trivial");

std::atomic曾经是微不足道的(需要Trivially Copyable),但现在已不复存在了。 请参阅此答案 ,以获得有关如何以及为何发生变化的详细解释。

这使得VC兼容,gcc和clang至少在C ++ 17中不兼容。 由于这被委员会视为缺陷,VC也显示了C ++ 11和C ++ 14的所需行为。

为了将来参考,相关缺陷是DR#1734 ,您可以在此处查看clang的实现状态。 我不知道gcc的等效状态页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM