template <typename T, typename... Args> T* Alloc(Args&&... args) { assert(gHeap.is_initialized_); void* place = gHeap.Allocate(sizeof(T)); assert(place != nullptr); // placement new return new (place) T(std::forward<Args>(args)...); }
So there is nothing to really break up