diff mbox series

[committed] libstdc++: the specialization atomic_ref<bool> should use the primary template

Message ID 20240711231632.1263377-1-jwakely@redhat.com
State New
Headers show
Series [committed] libstdc++: the specialization atomic_ref<bool> should use the primary template | expand

Commit Message

Jonathan Wakely July 11, 2024, 11:14 p.m. UTC
On Thu, 23 May 2024 at 00:06, Lebrun-Grandie, Damien wrote:
>
> See patch attached to this email.

Thanks for the patch. Sorry it took a while, but I've now pushed it to
trunk, along with the test below.

Tested x86_64-linux. Pushed to trunk.

-- >8 --

The previous commit changed atomic_ref<bool> to not use the integral
specialization. This adds a test to verify that change. We can't
directly test that the primary template is used, but we can check that
the member functions of the integral specializations are not present.

libstdc++-v3/ChangeLog:

	* testsuite/29_atomics/atomic_ref/bool.cc: New test.
---
 .../testsuite/29_atomics/atomic_ref/bool.cc       | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc
diff mbox series

Patch

diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc
new file mode 100644
index 00000000000..4702932627e
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc
@@ -0,0 +1,15 @@ 
+// { dg-do compile { target c++20 } }
+
+#include <atomic>
+
+template<class T> concept has_and = requires (T& a) { a &= false; };
+template<class T> concept has_or = requires (T& a) { a |= false; };
+template<class T> concept has_xor = requires (T& a) { a ^= false; };
+template<class T> concept has_fetch_add = requires (T& a) { a.fetch_add(true); };
+template<class T> concept has_fetch_sub = requires (T& a) { a.fetch_sub(true); };
+
+static_assert( not has_and<std::atomic_ref<bool>> );
+static_assert( not has_or<std::atomic_ref<bool>> );
+static_assert( not has_xor<std::atomic_ref<bool>> );
+static_assert( not has_fetch_add<std::atomic_ref<bool>> );
+static_assert( not has_fetch_sub<std::atomic_ref<bool>> );