I thought g++ 10.3 should have supported the C++20 feature of atomic shared_ptr? But I am still getting the following error
#include <atomic>
#include <thread>
#include <memory>
int main() {
std::atomic<std::shared_ptr<int>> a = std::make_shared<int>(1);
}
In file included from test.cc:1:
/usr/include/c++/10/atomic: In instantiation of ‘struct std::atomic<std::shared_ptr<int> >’:
test.cc:6:37: required from here
/usr/include/c++/10/atomic:195:21: error: static assertion failed: std::atomic requires a trivially copyable type
195 | static_assert(__is_trivially_copyable(_Tp),
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
user4581301
34.1k7 gold badges42 silver badges65 bronze badges
asked Jan 24, 2022 at 23:54
Kenneth
6851 gold badge7 silver badges17 bronze badges
1 Answer 1
The documentation lists it as supported only since GCC 12.1, i.e. the next release, and compiler explorer shows that your code compiles on GCC trunk: https://godbolt.org/z/4ThzMrjM9
answered Jan 25, 2022 at 0:01
user17732522
78.2k3 gold badges84 silver badges148 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
lang-cpp
std::atomic<std::shared_ptr<int>> a {std::make_shared<int>(1)};work?atomic<int> x = 5;usually fails to compile on GCC/Clang. Only in formatomic<int> x{5};it compiles.