atomic<shared_ptr<T>>在 GCC 和 Clang 的受支持程度真是一言难尽

查看 11|回复 0
作者:cnbatch   
Clang 到现在都不支持atomic>,只能继续 atomic_load() 和 atomic_store()。一旦要用 weak_ptr 则如同残废,不支持atomic_load()和 atomic_store()。
GCC 12.2 及旧版本有“bug”( P0718R2 的疏忽),刚好 Debian 12 自带的 GCC 就是 12.2 ,直接完蛋。
这段代码在 Debian 12 (bookworm)无法编译,换成 Debian Testing (trixie)就可以成功编译:
#include
#include
class A{ int a; };
int main()
{
    std::atomic> a_ptr = std::make_shared();
    a_ptr = nullptr;
    return 0;
}
想要写跨编译器的代码很麻烦,只能加好几行#if #else #endif
Clang 原本已经有人在实现atomic>,准备到一半就放弃了:
[libc++] Implement P0718R2: atomic>
放弃的原因令人无语,因为 PR 内wait/notify_all的效率不太高,需要重写,作者直接不干了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部