summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r--libstdc++-v3/include/bits/atomic_base.h20
-rw-r--r--libstdc++-v3/include/std/version1
2 files changed, 21 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h
index 87fe0bd6000..3b66b040976 100644
--- a/libstdc++-v3/include/bits/atomic_base.h
+++ b/libstdc++-v3/include/bits/atomic_base.h
@@ -208,6 +208,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __atomic_test_and_set (&_M_i, int(__m));
}
+#if __cplusplus > 201703L
+#define __cpp_lib_atomic_flag_test 201907L
+
+ _GLIBCXX_ALWAYS_INLINE bool
+ test(memory_order __m = memory_order_seq_cst) noexcept
+ {
+ __atomic_flag_data_type __v;
+ __atomic_load(&_M_i, &__v, int(__m));
+ return __v == __GCC_ATOMIC_TEST_AND_SET_TRUEVAL;
+ }
+
+ _GLIBCXX_ALWAYS_INLINE bool
+ test(memory_order __m = memory_order_seq_cst) volatile noexcept
+ {
+ __atomic_flag_data_type __v;
+ __atomic_load(&_M_i, &__v, int(__m));
+ return __v == __GCC_ATOMIC_TEST_AND_SET_TRUEVAL;
+ }
+#endif // C++20
+
_GLIBCXX_ALWAYS_INLINE void
clear(memory_order __m = memory_order_seq_cst) noexcept
{
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index c3a5bd26e63..c6bde2cfbda 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -164,6 +164,7 @@
#if __cplusplus > 201703L
// c++2a
+#define __cpp_lib_atomic_flag_test 201907L
#define __cpp_lib_atomic_float 201711L
#define __cpp_lib_atomic_ref 201806L
#define __cpp_lib_atomic_value_initialization 201911L