| std::enable_if_t<std::is_pointer<RR>::value && std::is_nothrow_copy_constructible<RR>::value | std::enable_if_t<std::is_pointer<RR>::value && std::is_nothrow_copy_constructible<RR>::value | ||||
| && ( std::is_class<std::remove_pointer_t<RR>>::value | && ( std::is_class<std::remove_pointer_t<RR>>::value | ||||
| || std::is_union<std::remove_pointer_t<RR>>::value ), int> = 0 | || std::is_union<std::remove_pointer_t<RR>>::value ), int> = 0 | ||||
| > | |||||
| > | |||||
| RR operator->() const noexcept | RR operator->() const noexcept | ||||
| { | { | ||||
| return m_resource; | return m_resource; | ||||
| template<class RR = R, class DD = D, | template<class RR = R, class DD = D, | ||||
| std::enable_if_t<(std::is_nothrow_move_assignable<RR>::value || std::is_nothrow_copy_assignable<RR>::value) | std::enable_if_t<(std::is_nothrow_move_assignable<RR>::value || std::is_nothrow_copy_assignable<RR>::value) | ||||
| && (std::is_nothrow_copy_assignable<DD>::value || std::is_nothrow_copy_assignable<DD>::value), int> = 0 | && (std::is_nothrow_copy_assignable<DD>::value || std::is_nothrow_copy_assignable<DD>::value), int> = 0 | ||||
| > | |||||
| > | |||||
| unique_resource& operator=(unique_resource&& other) | unique_resource& operator=(unique_resource&& other) | ||||
| { | { | ||||
| if( this != &other ) | if( this != &other ) |