原子结构的统一初始化?

时间:2014-07-22 15:11:02

标签: c++ c++11 atomic uniform-initialization aggregate-initialization

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有解决方法吗?

2 个答案:

答案 0 :(得分:5)

这是clang bug 18097Here's一个讨论这个问题的长线程,似乎clang只支持Tatomic<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。