https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118757
Bug ID: 118757 Summary: Waiting for stored pointer inside std::atomic<std::shared_ptr<T>> Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: fchelnokov at gmail dot com Target Milestone: --- According to https://devblogs.microsoft.com/oldnewthing/20250109-00/?p=110738 the following C++20 program ``` #include <memory> #include <chrono> #include <thread> std::shared_ptr<int> q = std::make_shared<int>(42); std::atomic<std::shared_ptr<int>> p = q; void signaler() { std::this_thread::sleep_for(std::chrono::seconds(1)); p.store({ q, nullptr }); p.notify_one(); std::this_thread::sleep_for(std::chrono::seconds(1)); std::terminate(); } int main(int, char**) { std::thread(signaler).detach(); p.wait(q); return 0; } ``` must finish gracefully by return 0; and not by std::terminate, because p.wait(q) must stop immediately after p.store({ q, nullptr }); p.notify_one(); Online demo: https://gcc.godbolt.org/z/hqG5T8469