The definition of the _Atomic(T) macro needs to refer to ::std::atomic,
not some other std::atomic relative to the current namespace.
libstdc++-v3/ChangeLog:
PR libstdc++/115807
* include/c_compatibility/stdatomic.h (_Atomic): Ensure it
refers to std::atomic in the global namespace.
* testsuite/29_atomics/headers/stdatomic.h/115807.cc: New test.
#ifdef __cpp_lib_stdatomic_h // C++ >= 23
#include <atomic>
-#define _Atomic(_Tp) std::atomic<_Tp>
+#define _Atomic(_Tp) ::std::atomic<_Tp>
using std::memory_order;
using std::memory_order_relaxed;
--- /dev/null
+// { dg-do compile { target c++23 } }
+#include <stdatomic.h>
+namespace other {
+ namespace std {
+ int atomic = 0;
+ }
+ _Atomic(long) a{};
+}
+
+#include <type_traits>
+
+namespace non::std {
+ static_assert( ::std::is_same_v<_Atomic(int), ::std::atomic<int>> );
+}