| template<class EF> | template<class EF> | ||||
| class scope_fail : public detail::scope_guard_base<EF, detail::scope_fail_strategy> | class scope_fail : public detail::scope_guard_base<EF, detail::scope_fail_strategy> | ||||
| { | { | ||||
| using Base = detail::scope_guard_base<EF, detail::scope_fail_strategy>; | |||||
| public: | public: | ||||
| using detail::scope_guard_base<EF, detail::scope_fail_strategy>::scope_guard_base; | |||||
| template<class EFP, | |||||
| std::enable_if_t<std::is_constructible_v<EF, EFP>, int> = 0, | |||||
| std::enable_if_t<!std::is_same_v<detail::remove_cvref_t<EFP>, scope_fail<EF>>, int> = 0 | |||||
| > | |||||
| explicit scope_fail(EFP&& exitFunction) noexcept(std::is_nothrow_constructible_v<EF, EFP>) | |||||
| : Base(std::forward<EFP>(exitFunction)) | |||||
| { | |||||
| } | |||||
| private: | private: |