#pragma once #include namespace Donut { template using Ref = std::shared_ptr; template using Scope = std::unique_ptr; template constexpr Scope CreateScope(Args&& ... args) { return std::make_unique(std::forward(args)...); } template constexpr Ref CreateRef(Args&& ... args) { return std::make_shared(std::forward(args)...); } };