From: Yedidya Feldblum Date: Thu, 11 Jan 2018 01:52:16 +0000 (-0800) Subject: Cut the ScopeGuard alias now that we have auto X-Git-Tag: v2018.01.15.00~15 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=653053aa7a270129b35d405e3d196210c44ec6e2 Cut the ScopeGuard alias now that we have auto Summary: [Folly] Cut the `ScopeGuard` alias now that we have `auto`. This form works because of hidden lifetime extension: ```lang=c++ folly::ScopeGuard guard = folly::makeGuard([] { /*...*/ }); // ... // guard falls out of scope ``` But this form would not work correctly: ```lang=c++ folly::ScopeGuard guard = folly::makeGuard([] { /*...*/ }); std::async(std::launch::async, [guard = std::move(guard)] {}); ``` Because `folly::ScopeGuard` is an rvalue-reference-to-base. We have `auto`, so just remove `folly::ScopeGuard`. This form works correctly: ```lang=c++ auto guard = folly::makeGuard([] { /*...*/ }); std::async(std::launch::async, [guard = std::move(guard)] {}); ``` Reviewed By: igorsugak Differential Revision: D6690070 fbshipit-source-id: 54e32b300d36fce4eb95a59f1828819afe312ec0 --- diff --git a/folly/ScopeGuard.h b/folly/ScopeGuard.h index 135d2c4c..410dc6f7 100644 --- a/folly/ScopeGuard.h +++ b/folly/ScopeGuard.h @@ -185,11 +185,6 @@ detail::ScopeGuardImplDecay makeGuard(F&& f) noexcept( return detail::ScopeGuardImplDecay(static_cast(f)); } -/** - * This is largely unneeded if you just use auto for your guards. - */ -typedef detail::ScopeGuardImplBase&& ScopeGuard; - namespace detail { #if defined(FOLLY_EXCEPTION_COUNT_USE_CXA_GET_GLOBALS) || \