struct S
{
int x;
int y;
};
std::atomic<S> asd{{1, 2}}; // what should this be? This doesn't work
编辑:{{1, 2}}
和({1, 2})
都在g ++中工作,但在clang中都不起作用。 clang有解决方法吗?
答案 0 :(得分:5)
这是clang bug 18097。 Here's一个讨论这个问题的长线程,似乎clang只支持T
中atomic<T>
的标量类型。 C ++ 11标准明确指出(§29.5/ 1)T
可以是任何平凡的可复制类型。
问题中显示的两种用法都应与此构造函数匹配
constexpr atomic(T) noexcept;
我能想到解决此问题的唯一方法是默认构造atomic<S>
,然后使用atomic::store
初始化对象。
std::atomic<S> asd;
asd.store({1,2});
答案 1 :(得分:0)
std::atomic<S> asd({1, 2});
std::atomic<S>
有一个构造函数,其值为S.
由于此构造函数,初始化列表{1,2}被隐式转换为临时S。