#pragma once #include #include namespace frostbite2D { struct DefaultRefPtrPolicy { void Retain(RefObject* ptr) { if (ptr) { ptr->Retain(); } } void Release(RefObject* ptr) { if (ptr) { ptr->Release(); } } }; template using RefPtr = RefBasePtr; template RefPtr MakePtr(Args&&... args) { static_assert(std::is_base_of::value, "T must be derived from RefObject"); return RefPtr(new T(std::forward(args)...)); } template RefPtr MakePtr(T* ptr) { static_assert(std::is_base_of::value, "T must be derived from RefObject"); return RefPtr(ptr); } }