我有一个 C++20 程序,可以在 Ubuntu 20 中使用 GCC 10 或在 Visual Studio 2019 中成功构建。现在我需要为 macOS 13.7.2 x64(当前可在GitHub 托管的运行器上获得)编译它,它拥有 AppleClang 15 编译器。
该程序使用std::atomic<float>
数据类型及其fetch_add
操作如例所示:
#include <atomic>
int main() {
std::atomic<float> a{0};
a.fetch_add(1);
}
不幸的是,它无法在 AppleClang 15 中编译
错误:'std::atomic' 中没有名为 'fetch_add' 的成员
在线演示:https ://gcc.godbolt.org/z/8WvGrczq7
我想保留std::atomic<float>
程序中的数据类型(以尽量减少更改),但fetch_add
用其他可用的东西替换(可能性能较差)。 有没有针对旧 Clangs 的此类解决方法libc++
?
正如评论所说,
std::compare_exchange_weak
适用于您的 clang 版本。C++20 的 libc++ 状态页面显示P0020 (添加的论文
std::fetch_add
)是针对 clang 18 实现的。[后来:我弄错了 - 我说的是 P0019,它添加了
atomic_ref
,它有自己的fetch_add
调用。感谢@Nate 的纠正。]