#pragma once #include #include "directory.h" namespace asyncpp { namespace fs { namespace __directory { template< chaining_mode X_mode, typename X_self> inline auto remove_impl(X_self&& p_self) { return lazy([self = std::forward(p_self)] { if (self.handle.exists()) self.handle.remove(false); return self; // TODO: use std::forward }); } } } } namespace asyncpp { namespace fs { /* directory::remove */ template auto directory ::remove() & { return __directory::remove_impl(*this); } template auto directory ::remove() && { static_assert( X_mode != ref, "Can not store rvalue reference as lvalue reference!"); return __directory::remove_impl(std::move(*this)); } } }