Import CStringView from the Babeltrace tree
[lttng-tools.git] / src / common / scope-exit.hpp
index 46479bc572439762ecded83cad8d4b682927cac0..3f8c90f80941fbe4384c498c559a6c4d6454be0c 100644 (file)
@@ -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<ScopeExitInvocableType>::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<ScopeExitInvocableType>(scope_exit_callable)}
+               _on_scope_exit{ std::forward<ScopeExitInvocableType>(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 <typename ScopeExitInvocableType>
 scope_exit<ScopeExitInvocableType> make_scope_exit(ScopeExitInvocableType&& scope_exit_callable)
 {
        return scope_exit<ScopeExitInvocableType>(
-                       std::forward<ScopeExitInvocableType>(scope_exit_callable));
+               std::forward<ScopeExitInvocableType>(scope_exit_callable));
 }
 
 } /* namespace lttng */
This page took 0.025832 seconds and 4 git commands to generate.