/*
- * Copyright 2013 Facebook, Inc.
+ * Copyright 2015 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <functional>
#include <new>
-#include "folly/Preprocessor.h"
-#include "folly/detail/UncaughtExceptionCounter.h"
+#include <folly/Preprocessor.h>
+#include <folly/detail/UncaughtExceptionCounter.h>
namespace folly {
ScopeGuardImplBase()
: dismissed_(false) {}
- ScopeGuardImplBase(ScopeGuardImplBase&& other)
+ ScopeGuardImplBase(ScopeGuardImplBase&& other) noexcept
: dismissed_(other.dismissed_) {
other.dismissed_ = true;
}
, exceptionCounter_(std::move(other.exceptionCounter_)) {
}
- ~ScopeGuardForNewException() noexcept {
+ ~ScopeGuardForNewException() noexcept(executeOnException) {
if (executeOnException == exceptionCounter_.isNewUncaughtException()) {
- execute();
+ function_();
}
}
void* operator new(size_t) = delete;
- void execute() noexcept { function_(); }
-
FunctionType function_;
UncaughtExceptionCounter exceptionCounter_;
};
#define SCOPE_EXIT \
auto FB_ANONYMOUS_VARIABLE(SCOPE_EXIT_STATE) \
- = ::folly::detail::ScopeGuardOnExit() + [&]
+ = ::folly::detail::ScopeGuardOnExit() + [&]() noexcept
#if defined(FOLLY_EXCEPTION_COUNT_USE_CXA_GET_GLOBALS) || \
defined(FOLLY_EXCEPTION_COUNT_USE_GETPTD)
#define SCOPE_FAIL \
auto FB_ANONYMOUS_VARIABLE(SCOPE_FAIL_STATE) \
- = ::folly::detail::ScopeGuardOnFail() + [&]
+ = ::folly::detail::ScopeGuardOnFail() + [&]() noexcept
#define SCOPE_SUCCESS \
auto FB_ANONYMOUS_VARIABLE(SCOPE_SUCCESS_STATE) \
- = ::folly::detail::ScopeGuardOnSuccess() + [&]
+ = ::folly::detail::ScopeGuardOnSuccess() + [&]()
#endif // native uncaught_exception() supported
#endif // FOLLY_SCOPEGUARD_H_