forked from TartanLlama/expected
Use move construction in swap implementation (#103)
* Use correct type alias in swap helper function This was not an issue since both t_is_nothrow_move_constructible and e_is_nothrow_move_constructible are type aliases for std::true_type. * Use move instead of copy in swap implementation
This commit is contained in:
@@ -1837,12 +1837,12 @@ private:
|
|||||||
|
|
||||||
void swap_where_only_one_has_value_and_t_is_not_void(
|
void swap_where_only_one_has_value_and_t_is_not_void(
|
||||||
expected &rhs, move_constructing_t_can_throw,
|
expected &rhs, move_constructing_t_can_throw,
|
||||||
t_is_nothrow_move_constructible) {
|
e_is_nothrow_move_constructible) {
|
||||||
auto temp = std::move(rhs.err());
|
auto temp = std::move(rhs.err());
|
||||||
rhs.err().~unexpected_type();
|
rhs.err().~unexpected_type();
|
||||||
#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED
|
#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED
|
||||||
try {
|
try {
|
||||||
::new (rhs.valptr()) T(val());
|
::new (rhs.valptr()) T(std::move(val()));
|
||||||
val().~T();
|
val().~T();
|
||||||
::new (errptr()) unexpected_type(std::move(temp));
|
::new (errptr()) unexpected_type(std::move(temp));
|
||||||
std::swap(this->m_has_val, rhs.m_has_val);
|
std::swap(this->m_has_val, rhs.m_has_val);
|
||||||
@@ -1851,7 +1851,7 @@ private:
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
::new (rhs.valptr()) T(val());
|
::new (rhs.valptr()) T(std::move(val()));
|
||||||
val().~T();
|
val().~T();
|
||||||
::new (errptr()) unexpected_type(std::move(temp));
|
::new (errptr()) unexpected_type(std::move(temp));
|
||||||
std::swap(this->m_has_val, rhs.m_has_val);
|
std::swap(this->m_has_val, rhs.m_has_val);
|
||||||
|
Reference in New Issue
Block a user