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