#pragma once #include #include #include #include #define ASSERT(x) if (!(x)) assert(false) template using Ref = std::shared_ptr; template using Scope = std::unique_ptr; template using Weak = std::weak_ptr; template constexpr Ref CreateRef(Args&& ... args) { return std::make_shared(std::forward(args)...); } template constexpr Scope CreateScope(Args&& ... args) { return std::make_unique(std::forward(args)...); }