|
|
|
|
|
|
|
|
unique_resource(unique_resource&& other) noexcept(std::is_nothrow_move_constructible_v<R> |
|
|
unique_resource(unique_resource&& other) noexcept(std::is_nothrow_move_constructible_v<R> |
|
|
&& std::is_nothrow_move_constructible_v<D>) |
|
|
&& std::is_nothrow_move_constructible_v<D>) |
|
|
: m_resource(std::move_if_noexcept(other.m_resource.get()), scope_exit{[] { }}), |
|
|
: m_resource(std::move_if_noexcept(other.m_resource.get()), scope_exit{[] { }}), |
|
|
m_deleter(std::move_if_noexcept(other.m_deleter.get()), |
|
|
|
|
|
scope_exit{[&other] { |
|
|
|
|
|
|
|
|
m_deleter(std::move_if_noexcept(other.m_deleter.get()), scope_exit{[&other] { |
|
|
other.get_deleter()(other.m_resource.get()); |
|
|
other.get_deleter()(other.m_resource.get()); |
|
|
other.release(); }}), |
|
|
other.release(); }}), |
|
|
m_execute_on_destruction(std::exchange(other.m_execute_on_destruction, false)) |
|
|
m_execute_on_destruction(std::exchange(other.m_execute_on_destruction, false)) |