X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Fscope-exit.hpp;h=3f8c90f80941fbe4384c498c559a6c4d6454be0c;hb=HEAD;hp=46479bc572439762ecded83cad8d4b682927cac0;hpb=b6bbb1d666531bf061f29884da1b0d7c10f59aa0;p=lttng-tools.git diff --git a/src/common/scope-exit.hpp b/src/common/scope-exit.hpp index 46479bc57..3f8c90f80 100644 --- a/src/common/scope-exit.hpp +++ b/src/common/scope-exit.hpp @@ -33,18 +33,19 @@ class scope_exit { public: /* * Since ScopeExitInvocableType will be invoked in the destructor, it - * must be `noexcept` lest we anger the undefined behaviour gods. + * must be `noexcept` lest we anger the undefined behaviour gods by throwing + * an exception while an exception is active. */ static_assert(details::is_invocation_noexcept::value, - "scope_exit requires a noexcept invocable type"); + "scope_exit requires a noexcept invocable type"); explicit scope_exit(ScopeExitInvocableType&& scope_exit_callable) : - _on_scope_exit{std::forward(scope_exit_callable)} + _on_scope_exit{ std::forward(scope_exit_callable) } { } - scope_exit(scope_exit&& rhs) : - _on_scope_exit{std::move(rhs._on_scope_exit)}, _armed{rhs._armed} + scope_exit(scope_exit&& rhs) noexcept : + _on_scope_exit{ std::move(rhs._on_scope_exit) }, _armed{ rhs._armed } { /* Don't invoke ScopeExitInvocableType for the moved-from copy. */ rhs.disarm(); @@ -58,6 +59,8 @@ public: * also propagate the scope_exit to another scope, should it be needed. */ scope_exit(const scope_exit&) = delete; + scope_exit& operator=(const scope_exit&) = delete; + scope_exit& operator=(scope_exit&&) = delete; scope_exit() = delete; void disarm() noexcept @@ -81,7 +84,7 @@ template scope_exit make_scope_exit(ScopeExitInvocableType&& scope_exit_callable) { return scope_exit( - std::forward(scope_exit_callable)); + std::forward(scope_exit_callable)); } } /* namespace lttng */