Fix std::exchange for C++11 compilers

This commit is contained in:
Wilson Snyder 2022-10-02 16:25:11 -04:00
parent 2a12b052f2
commit c9634695a7
2 changed files with 13 additions and 3 deletions

View File

@ -1113,7 +1113,7 @@ public:
refCountInc(); refCountInc();
} }
VlClassRef(VlClassRef&& moved) VlClassRef(VlClassRef&& moved)
: m_objp{std::exchange(moved.m_objp, nullptr)} {} : m_objp{vlstd::exchange(moved.m_objp, nullptr)} {}
~VlClassRef() { refCountDec(); } ~VlClassRef() { refCountDec(); }
// METHODS // METHODS
@ -1126,7 +1126,7 @@ public:
} }
VlClassRef& operator=(VlClassRef&& moved) { VlClassRef& operator=(VlClassRef&& moved) {
refCountDec(); refCountDec();
m_objp = std::exchange(moved.m_objp, nullptr); m_objp = vlstd::exchange(moved.m_objp, nullptr);
return *this; return *this;
} }
template <typename T_OtherClass> template <typename T_OtherClass>
@ -1139,7 +1139,7 @@ public:
template <typename T_OtherClass> template <typename T_OtherClass>
VlClassRef& operator=(VlClassRef<T_OtherClass>&& moved) { VlClassRef& operator=(VlClassRef<T_OtherClass>&& moved) {
refCountDec(); refCountDec();
m_objp = std::exchange(moved.m_objp, nullptr); m_objp = vlstd::exchange(moved.m_objp, nullptr);
return *this; return *this;
} }
// Dynamic caster // Dynamic caster

View File

@ -540,6 +540,8 @@ using ssize_t = uint32_t; ///< signed size_t; returned from read()
//========================================================================= //=========================================================================
// Conversions // Conversions
#include <utility>
namespace vlstd { namespace vlstd {
template <typename T> template <typename T>
@ -564,6 +566,14 @@ T const& as_const(T& v) {
return v; return v;
} }
// C++14's std::exchange
template <class T, class U = T>
T exchange(T& obj, U&& new_value) {
T old_value = std::move(obj);
obj = std::forward<U>(new_value);
return old_value;
}
}; // namespace vlstd }; // namespace vlstd
//========================================================================= //=========================================================================