aboutsummaryrefslogtreecommitdiffstats
path: root/common/intrusive_ptr.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/intrusive_ptr.h')
-rw-r--r--common/intrusive_ptr.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/common/intrusive_ptr.h b/common/intrusive_ptr.h
index 31afa70f..9e206a6b 100644
--- a/common/intrusive_ptr.h
+++ b/common/intrusive_ptr.h
@@ -62,6 +62,8 @@ public:
intrusive_ptr& operator=(const intrusive_ptr &rhs) noexcept
{
+ static_assert(noexcept(std::declval<T*>()->release()), "release must be noexcept");
+
if(rhs.mPtr) rhs.mPtr->add_ref();
if(mPtr) mPtr->release();
mPtr = rhs.mPtr;
@@ -71,10 +73,8 @@ public:
{
if(likely(&rhs != this))
{
- if(mPtr)
- mPtr->release();
- mPtr = rhs.mPtr;
- rhs.mPtr = nullptr;
+ if(mPtr) mPtr->release();
+ mPtr = std::exchange(rhs.mPtr, nullptr);
}
return *this;
}