37 lines
		
	
	
		
			713 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			713 B
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
#include <utility>
 | 
						|
#include "casts.h"
 | 
						|
 | 
						|
#pragma warning(disable:4312)
 | 
						|
 | 
						|
namespace meta
 | 
						|
{
 | 
						|
	template<typename T, typename U>
 | 
						|
	constexpr T s_cast(U&& rhs) noexcept
 | 
						|
	{
 | 
						|
		return static_cast<T>(std::forward<U>(rhs));
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, typename U>
 | 
						|
	constexpr T d_cast(U&& rhs) noexcept
 | 
						|
	{
 | 
						|
		return dynamic_cast<T>(std::forward<U>(rhs));
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, typename U>
 | 
						|
	constexpr T r_cast(U&& rhs) noexcept
 | 
						|
	{
 | 
						|
		return reinterpret_cast<T>(std::forward<U>(rhs));
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename T, typename U>
 | 
						|
	constexpr T c_cast(U&& rhs) noexcept
 | 
						|
	{
 | 
						|
		return const_cast<T>(std::forward<U>(rhs));
 | 
						|
	}
 | 
						|
	template<typename T>
 | 
						|
	constexpr auto&& fwd(T&& fwdee) noexcept
 | 
						|
	{
 | 
						|
		return static_cast<T&&>(fwdee);
 | 
						|
	}
 | 
						|
} |