Browse Source

Unique Resource MCtor restrictions implemented.

main
offa 6 years ago
parent
commit
59c901c513
1 changed files with 13 additions and 2 deletions
  1. +13
    -2
      include/unique_resource.h

+ 13
- 2
include/unique_resource.h View File



namespace sr namespace sr
{ {
namespace detail
{
template<class T, class U,
class R = std::conditional_t<std::is_nothrow_constructible_v<T, U>, U&&, U>
>
constexpr R forward_if_nothrow_constructible(U&& arg)
{
return std::forward<U>(arg);
}
}



template<class R, class D> template<class R, class D>
class unique_resource class unique_resource
> >
explicit unique_resource(RR&& r, DD&& d) noexcept((std::is_nothrow_constructible_v<R, RR> || std::is_nothrow_constructible_v<R, RR&>) explicit unique_resource(RR&& r, DD&& d) noexcept((std::is_nothrow_constructible_v<R, RR> || std::is_nothrow_constructible_v<R, RR&>)
&& (std::is_nothrow_constructible_v<D, DD> || std::is_nothrow_constructible_v<D, DD&>)) && (std::is_nothrow_constructible_v<D, DD> || std::is_nothrow_constructible_v<D, DD&>))
: m_resource(std::forward<RR>(r), scope_exit{[&r, &d] { d(r); }}),
m_deleter(std::forward<DD>(d), scope_exit{[this, &d] { d(get()); }}),
: m_resource(detail::forward_if_nothrow_constructible<R, RR>(std::forward<RR>(r)), scope_exit{[&r, &d] { d(r); }}),
m_deleter(detail::forward_if_nothrow_constructible<D, DD>(std::forward<DD>(d)), scope_exit{[this, &d] { d(get()); }}),
m_execute_on_destruction(true) m_execute_on_destruction(true)
{ {
} }

Loading…
Cancel
Save