mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-25 01:19:19 +00:00 
			
		
		
		
	SPDX standardizes how source code conveys its copyright and licensing information. See https://spdx.github.io/spdx-spec/1-rationale/ . SPDX tags are adopted in many large projects, including things like the Linux kernel.
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			686 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			686 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2018 Dolphin Emulator Project
 | |
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <variant>
 | |
| 
 | |
| namespace detail
 | |
| {
 | |
| template <typename... From>
 | |
| struct VariantCastProxy
 | |
| {
 | |
|   const std::variant<From...>& v;
 | |
| 
 | |
|   template <typename... To>
 | |
|   operator std::variant<To...>() const
 | |
|   {
 | |
|     return std::visit([](auto&& arg) { return std::variant<To...>{arg}; }, v);
 | |
|   }
 | |
| };
 | |
| }  // namespace detail
 | |
| 
 | |
| template <typename... From>
 | |
| auto VariantCast(const std::variant<From...>& v)
 | |
| {
 | |
|   return detail::VariantCastProxy<From...>{v};
 | |
| }
 | |
| 
 | |
| template <class... Ts>
 | |
| struct overloaded : Ts...
 | |
| {
 | |
|   using Ts::operator()...;
 | |
| };
 | |
| 
 | |
| template <class... Ts>
 | |
| overloaded(Ts...) -> overloaded<Ts...>;
 |