Tenho um programa em C++20 que pode ser criado com sucesso no Ubuntu 20 com GCC 10 ou no Visual Studio 2019. E agora preciso compilá-lo para o macOS 13.7.2 x64 (atualmente disponível no runner hospedado no GitHub ), que possui o compilador AppleClang 15.
O programa usa std::atomic<float>
tipos de dados e fetch_add
operações para eles como no exemplo:
#include <atomic>
int main() {
std::atomic<float> a{0};
a.fetch_add(1);
}
Infelizmente, ele não compila no AppleClang 15 com o
erro: nenhum membro chamado 'fetch_add' em 'std::atomic'
Demonstração online: https://gcc.godbolt.org/z/8WvGrczq7
Gostaria de manter std::atomic<float>
os tipos de dados no programa (para minimizar as mudanças), mas substituir fetch_add
por algo mais disponível (provavelmente menos performático). Existe uma solução alternativa para Clangs antigos com libc++
?
Como comentado,
std::compare_exchange_weak
está disponível para sua versão clang.A página de status da libc++ para C++20 mostra que o P0020 (o artigo que adicionou
std::fetch_add
) foi implementado para o clang 18.[Mais tarde: Eu estava enganado - eu disse P0019, que adicionou
atomic_ref
, que tem suas própriasfetch_add
chamadas. Obrigado a @Nate pela correção. ]