#ifndef __GBLIBCPP_UTILITY__ #define __GBLIBCPP_UTILITY__ #include 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; } template constexpr void swap(T& a, T& b) { T tmp(std::move(a)); a = std::move(b); b = std::move(tmp); } template struct integer_sequence { static constexpr std::size_t size() noexcept { return sizeof...(Ints); } }; template using index_sequence = integer_sequence; template struct make_index_sequence : public make_index_sequence {}; template struct make_index_sequence<0, Indicies...> : public index_sequence {}; template using index_sequence_for = make_index_sequence; } // namespace std #endif