#ifndef UTILITY_H #define UTILITY_H #include namespace Core { namespace Internal { template struct RemoveReferenceBase { typedef T t; }; template struct RemoveReferenceBase { typedef T t; }; template struct RemoveReferenceBase { typedef T t; }; template struct IsSameBase { static constexpr bool value = false; }; template struct IsSameBase { static constexpr bool value = true; }; } template using RemoveReference = typename Internal::RemoveReferenceBase::t; template constexpr bool IsSame = Internal::IsSameBase::value; template constexpr RemoveReference&& move(T&& t) { return static_cast&&>(t); } template constexpr T&& forward(RemoveReference& t) { return static_cast(t); } template constexpr T&& forward(RemoveReference&& t) { return static_cast(t); } template void swap(T& a, T& b) { T tmp = Core::move(a); a = Core::move(b); b = Core::move(tmp); } int popcount(int i); } void* operator new(size_t bytes) noexcept; void* operator new[](size_t bytes) noexcept; void operator delete(void* p) noexcept; void operator delete[](void* p) noexcept; void operator delete(void* p, size_t bytes) noexcept; void operator delete[](void* p, size_t bytes) noexcept; void* operator new(size_t bytes, void* p) noexcept; void* operator new[](size_t bytes, void* p) noexcept; #endif