首页 > 解决方案 > 是 std::atomic>> 有效/安全?

问题描述

根据是否 std::atomic<std::string> 工作正常?,std::atomic<std::string>无效,并可能导致未定义的行为。

怎么样std::atomic<std::optional<std::chrono::time_point<std::chrono::system_clock>>>

std::optionaloperator=std::chrono::time_point没有,所以我很困惑。我如何确定任何类型?

标签: c++c++11

解决方案


检查很简单:

static_assert(std::is_trivially_copyable_v<
    std::optional<std::chrono::time_point<std::chrono::system_clock>>>);

在 gcc 8.1(以及相关的 libstdc++)之前,断言失败,因此使用起来不安全。在 gcc 8.1 之后,断言通过了,所以它是安全的。

在 clang 7(以及相关的 libc++)之前,断言失败,因此使用起来不安全。在 clang 7 之后,断言通过并且它是安全的。


推荐阅读