Folly库要求std::atomic<hazptr_obj*>
必须是简单类型。这适用于gcc和clang,但不适用于Visual C++,甚至不适用于std::atomic<int>
。为什么std::is_trivial
返回false
#include <type_traits>
#include <atomic>
static_assert(
std::is_trivial<std::atomic<int>>::value,
"std::atomic<int> not trivial");
发布于 2018-02-14 19:08:54
std::atomic
曾经是微不足道的(这需要微不足道的可复制性),但现在不是了。有关这种情况如何以及为什么发生变化的详细解释,请参阅this answer。
这使得VC兼容,而gcc和clang至少在C++17中是不兼容的。由于这被委员会认为是一个缺陷,VC也显示了C++11和C++14的预期行为。
为了便于以后参考,相关缺陷是DR #1734,您可以查看clang here的实现状态。我不知道有没有类似的状态页面是关于gcc的。
发布于 2018-02-18 20:45:04
对于https://github.com/facebook/folly/commit/a47a5531edcb95a27f987e810272ba94a9b51162中的MSVC,已禁用folly
中的断言
https://stackoverflow.com/questions/48794325
复制相似问题