aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2022-04-25 18:25:07 +0100
committerJonathan Wakely <jwakely@redhat.com>2022-04-26 13:22:18 +0100
commit41ccd683f0002d7b5127aafc00dcd59e7837f0ab (patch)
treed0cefe994b93c72ef6648a35b3159638e5869a3a /libstdc++-v3
parente3c5e8360b4e4799e1e2daf74282629248690f23 (diff)
downloadgcc-41ccd683f0002d7b5127aafc00dcd59e7837f0ab.zip
gcc-41ccd683f0002d7b5127aafc00dcd59e7837f0ab.tar.gz
gcc-41ccd683f0002d7b5127aafc00dcd59e7837f0ab.tar.bz2
libstdc++: Add std::atomic<shared_ptr>(nullptr_t) constructor (LWG 3661)
This DR was approved at the February 2022 plenary. libstdc++-v3/ChangeLog: * include/bits/shared_ptr_atomic.h (atomic<shared_ptr>): Add constructor for constant initialization from nullptr_t. * testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc: Check for new constructor.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/include/bits/shared_ptr_atomic.h4
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc2
2 files changed, 6 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/shared_ptr_atomic.h b/libstdc++-v3/include/bits/shared_ptr_atomic.h
index 9e4df7d..ff86432 100644
--- a/libstdc++-v3/include/bits/shared_ptr_atomic.h
+++ b/libstdc++-v3/include/bits/shared_ptr_atomic.h
@@ -573,6 +573,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr atomic() noexcept = default;
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3661. constinit atomic<shared_ptr<T>> a(nullptr); should work
+ constexpr atomic(nullptr_t) noexcept : atomic() { }
+
atomic(shared_ptr<_Tp> __r) noexcept
: _M_impl(std::move(__r))
{ }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc
index 1f97224..a190274 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc
@@ -18,6 +18,8 @@
// Check constexpr constructor.
constinit std::atomic<std::shared_ptr<int>> a;
+// LWG 3661. constinit atomic<shared_ptr<T>> a(nullptr); should work
+constinit std::atomic<std::shared_ptr<int>> a2 = nullptr;
void
test_is_lock_free()