【发布时间】:2018-02-14 18:56:22
【问题描述】:
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");
【问题讨论】:
-
我的印象是普通类型必须是普通可复制的,而
std::atomic类型不可复制。 -
我很好奇——您是输入了
static_assert,还是图书馆作者这样做了?如果是作者,那么他们一定知道std::atomic不能保证通过std::is_trivial测试。 -
std::atomic曾经是微不足道的,但现在已经不是了。请参阅stackoverflow.com/a/29759556/3002139 以获得详细的解释。 -
@PaulMcKenzie github.com/facebook/folly/blob/…
标签: c++ c++11 visual-c++