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

时间:2018-02-14 18:56:23

标签: c++ c++11 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");

2 个答案:

答案 0 :(得分:12)

std::atomic曾经是微不足道的(需要Trivially Copyable),但不再是。请参阅this answer,了解有关更改方式和原因的详尽解释。

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

为了将来参考,相关的缺陷是DR #1734,您可以看到clang here的实施状态。我不知道gcc的等效状态页。

答案 1 :(得分:1)

folly

中的MSVC已禁用 $('#jstree').on("dblclick.jstree", function (e) { var instance = $.jstree.reference(this), node = instance.get_node(e.target); // Code }); 中的断言