41 lines
		
	
	
		
			804 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			804 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| #pragma once
 | |
| 
 | |
| #if !defined(BAD_APPLE_OS_UTILITY_INCLUDED)
 | |
| #define BAD_APPLE_OS_UTILITY_INCLUDED
 | |
| 
 | |
| #include "type_traits"
 | |
| 
 | |
| namespace std
 | |
| {
 | |
| template<typename T>
 | |
| constexpr remove_reference_t<T>&& move(T&& val) noexcept
 | |
| {
 | |
|     return static_cast<remove_reference_t<T>&&>(val);
 | |
| }
 | |
| 
 | |
| template<typename T>
 | |
| constexpr void swap(T& first, T& second)
 | |
| {
 | |
|     T temp = std::move(first);
 | |
|     first = std::move(second);
 | |
|     second = std::move(temp);
 | |
| }
 | |
| 
 | |
| template<typename T>
 | |
| [[nodiscard]] constexpr T&& forward(remove_reference_t<T>& value)
 | |
| {
 | |
|     return static_cast<T&&>(value);
 | |
| }
 | |
| 
 | |
| template<typename T, typename U = T>
 | |
| [[nodiscard]] constexpr T exchange(T& obj, U&& newValue)
 | |
| {
 | |
|     T oldValue = std::move(obj);
 | |
|     obj = std::forward<U>(newValue);
 | |
|     return oldValue;
 | |
| }
 | |
| }
 | |
| 
 | |
| #endif // !defined(BAD_APPLE_OS_UTILITY_INCLUDED)
 |