【发布时间】:2019-05-07 23:38:59
【问题描述】:
对于每个
std::atomic<X>(无论是否特化),std::atomic<X>::value_type都是 X。
但是如果我尝试使用这种类型,我会得到一个编译错误。
我已经用g++ 8.2.1试过了:
$ g++ -std=c++11 test.cc
test.cc: In function ‘int main()’:
test.cc:6:23: error: ‘value_type’ is not a member of ‘std::atomic<int>’
std::atomic<int>::value_type x = 0;
并且使用 clang 6.0.1
$ clang -std=c++11 test.cc
test.cc:6:23: error: no type named 'value_type' in 'std::atomic<int>'
std::atomic<int>::value_type x = 0;
~~~~~~~~~~~~~~~~~~^
上面提到的参考手册还规定了……
规范被大幅重写以解决许多问题 特别是增加了成员typedefs value_type和difference_type
P0558R1 规范似乎并没有禁止 value_type 的存在。
知道发生了什么吗?
编辑
我的一位同事让我意识到 P0558R1 只是一个提案。
【问题讨论】:
-
P0558R1 adds
value_type和difference_type,由于它被视为 DR,因此它追溯适用于 C++11。 -
cppreference中的“特别是添加了成员typedefs value_type和difference_type”部分是我添加的,很遗憾它导致的效果与我预期的相反。
-
作为缺少
T::value_type的一种解决方法,可以尝试使用decltype(T.load())