https://gcc.gnu.org/g:43763bd75f1d37189ba08657a322e91d240e8cf3

commit r15-1981-g43763bd75f1d37189ba08657a322e91d240e8cf3
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Thu Jul 11 21:23:15 2024 +0100

    libstdc++: Test that std::atomic_ref<bool> uses the primary template
    
    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.

Diff:
---
 libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

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 000000000000..4702932627e8
--- /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>> );

Reply via email to