26 lines
		
	
	
		
			712 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			26 lines
		
	
	
		
			712 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								#include <tuple>
							 | 
						||
| 
								 | 
							
								#include <variant>
							 | 
						||
| 
								 | 
							
								namespace meta
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									template<typename Variant, template<class T> typename Template>
							 | 
						||
| 
								 | 
							
									struct variant_wrap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename Variant, template<class T> typename Template>
							 | 
						||
| 
								 | 
							
									using variant_wrap_t = typename variant_wrap<Variant, Template>::type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									struct tuple_to_variant;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									using tuple_to_variant_t = typename tuple_to_variant<T>::type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto variant_construct(size_t) noexcept;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<typename FindMe, typename Variant>
							 | 
						||
| 
								 | 
							
								    struct index_in_variant;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<typename FindMe, typename Variant>
							 | 
						||
| 
								 | 
							
								    constexpr auto index_in_variant_v = index_in_variant<FindMe, Variant>::value;
							 | 
						||
| 
								 | 
							
								}
							 |