#pragma once void* __cdecl operator new(size_t size, POOL_TYPE pool, unsigned long tag = 'momo'); void* __cdecl operator new[](size_t size, POOL_TYPE pool, unsigned long tag = 'momo'); void* __cdecl operator new(size_t size); void* __cdecl operator new[](size_t size); inline void* operator new(size_t, void* where); void __cdecl operator delete(void *ptr, size_t); void __cdecl operator delete(void *ptr); void __cdecl operator delete[](void *ptr, size_t); void __cdecl operator delete[](void *ptr); // TEMPLATE CLASS remove_reference template struct remove_reference { // remove reference typedef _Ty type; }; template struct remove_reference<_Ty&> { // remove reference typedef _Ty type; }; template struct remove_reference<_Ty&&> { // remove rvalue reference typedef _Ty type; }; template typename remove_reference::type&& move(T&& arg) { return static_cast::type&&>(arg); } // TEMPLATE FUNCTION forward template inline constexpr _Ty&& forward( typename remove_reference<_Ty>::type& _Arg) { // forward an lvalue as either an lvalue or an rvalue return (static_cast<_Ty&&>(_Arg)); } template inline constexpr _Ty&& forward( typename remove_reference<_Ty>::type&& _Arg) { // forward an rvalue as an rvalue return (static_cast<_Ty&&>(_Arg)); }