#ifndef __GBLIBCPP_UTILITY__ #define __GBLIBCPP_UTILITY__ namespace std { namespace __helpers { template struct __utility_remove_reference { using type = T; }; template struct __utility_remove_reference { using type = T; }; template struct __utility_remove_reference { using type = T; }; }; template constexpr typename __helpers::__utility_remove_reference::type&& move(T&& val) noexcept { return static_cast< typename __helpers::__utility_remove_reference::type&& >(val); } template constexpr T&& forward( typename __helpers::__utility_remove_reference::type& val) noexcept { return static_cast(val); } template constexpr T&& forward( typename __helpers::__utility_remove_reference::type&& val) noexcept { return static_cast(val); } template constexpr T exchange(T& dst, U&& val) { T tmp = move(dst); dst = forward(val); return tmp; } } // namespace std #endif