Browse Source

Implementation of all scope guards simplified a specific ctor is no

longer necessary. The Implementation can now become a simple 'using'
directive (#134).
main
offa 6 years ago
parent
commit
8aa4f8131a
3 changed files with 12 additions and 33 deletions
  1. +4
    -11
      include/scope_exit.h
  2. +4
    -11
      include/scope_fail.h
  3. +4
    -11
      include/scope_success.h

+ 4
- 11
include/scope_exit.h View File

@@ -42,20 +42,13 @@ namespace sr
template<class EF>
class scope_exit : public detail::scope_guard_base<EF, detail::scope_exit_strategy>
{
using Base = detail::scope_guard_base<EF, detail::scope_exit_strategy>;

using ScopeGuardBase = std::enable_if_t<!std::is_same_v<detail::remove_cvref_t<EF>, scope_exit<EF>>,
detail::scope_guard_base<EF, detail::scope_exit_strategy>
>;

public:

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_exit<EF>>, int> = 0
>
explicit scope_exit(EFP&& exitFunction) noexcept(std::is_nothrow_constructible_v<EF, EFP>
|| std::is_nothrow_constructible_v<EF, EFP&>)
: Base(std::forward<EFP>(exitFunction))
{
}
using ScopeGuardBase::ScopeGuardBase;

};


+ 4
- 11
include/scope_fail.h View File

@@ -45,20 +45,13 @@ namespace sr
template<class EF>
class scope_fail : public detail::scope_guard_base<EF, detail::scope_fail_strategy>
{
using Base = detail::scope_guard_base<EF, detail::scope_fail_strategy>;

using ScopeGuardBase = std::enable_if_t<!std::is_same_v<detail::remove_cvref_t<EF>, scope_fail<EF>>,
detail::scope_guard_base<EF, detail::scope_fail_strategy>
>;

public:

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>
|| std::is_nothrow_constructible_v<EF, EFP&>)
: Base(std::forward<EFP>(exitFunction))
{
}
using ScopeGuardBase::ScopeGuardBase;

};


+ 4
- 11
include/scope_success.h View File

@@ -52,20 +52,13 @@ namespace sr
template<class EF>
class scope_success : public detail::scope_guard_base<EF, detail::scope_success_strategy>
{
using Base = detail::scope_guard_base<EF, detail::scope_success_strategy>;

using ScopeGuardBase = std::enable_if_t<!std::is_same_v<detail::remove_cvref_t<EF>, scope_success<EF>>,
detail::scope_guard_base<EF, detail::scope_success_strategy>
>;

public:

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_success<EF>>, int> = 0
>
explicit scope_success(EFP&& exitFunction) noexcept(std::is_nothrow_constructible_v<EF, EFP>
|| std::is_nothrow_constructible_v<EF, EFP&>)
: Base(std::forward<EFP>(exitFunction))
{
}
using ScopeGuardBase::ScopeGuardBase;

};


Loading…
Cancel
Save