From 43763bd75f1d37189ba08657a322e91d240e8cf3 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 11 Jul 2024 21:23:15 +0100 Subject: [PATCH] libstdc++: Test that std::atomic_ref uses the primary template The previous commit changed atomic_ref 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 --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 + +template concept has_and = requires (T& a) { a &= false; }; +template concept has_or = requires (T& a) { a |= false; }; +template concept has_xor = requires (T& a) { a ^= false; }; +template concept has_fetch_add = requires (T& a) { a.fetch_add(true); }; +template concept has_fetch_sub = requires (T& a) { a.fetch_sub(true); }; + +static_assert( not has_and> ); +static_assert( not has_or> ); +static_assert( not has_xor> ); +static_assert( not has_fetch_add> ); +static_assert( not has_fetch_sub> );