8
struct S
{
    int x;
    int y;
};

std::atomic<S> asd{{1, 2}}; // what should this be? This doesn't work

编辑:两者都在 g++ 中工作,在铿锵声中都不工作{{1, 2}}({1, 2})铿锵有没有解决方法?

4

2 回答 2

5

这是铛错误 18097这是一个讨论这个问题的长线程,这似乎是 clang 只支持Tin 的标量类型atomic<T>。C++11 标准明确规定(第 29.5/1 节)T可以是任何可简单复制的类型。

问题中显示的两种用法都应与此构造函数匹配

constexpr atomic(T) noexcept;

我能想到解决这个问题的唯一方法是默认构造atomic<S>,然后用于atomic::store初始化对象。

std::atomic<S> asd;
asd.store({1,2});
于 2014-07-22T17:13:07.413 回答
0

std::atomic<S> asd({1, 2});

std::atomic<S>有一个采用 S 类型值的构造函数。初始化列表 {1, 2} 由于这个构造函数而被隐式转换为临时 S。

于 2014-07-22T15:25:12.477 回答