81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								#include <type_traits>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace meta
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    template<typename T, template<typename ...> typename Template>
							 | 
						||
| 
								 | 
							
								    struct is_template;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<typename T, template<typename ...> typename Template>
							 | 
						||
| 
								 | 
							
								    constexpr auto is_template_v = is_template<T, Template>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename Seq1, typename Seq2>
							 | 
						||
| 
								 | 
							
									struct index_sequence_cat;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename Seq1, typename Seq2>
							 | 
						||
| 
								 | 
							
									using index_sequence_cat_t = typename index_sequence_cat<Seq1, Seq2>::type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									struct index_sequence_rev;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									using index_sequence_rev_t = typename index_sequence_rev<T>::type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename>
							 | 
						||
| 
								 | 
							
									struct is_iterable;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto is_iterable_v = is_iterable<T>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename>
							 | 
						||
| 
								 | 
							
									struct is_sequential_container;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto is_sequential_container_v = is_sequential_container<T>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename>
							 | 
						||
| 
								 | 
							
									struct is_associative_container;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto is_associative_container_v = is_associative_container<T>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									struct is_container;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto is_container_v = is_container<T>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename>
							 | 
						||
| 
								 | 
							
									struct is_contiguous_container;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto is_contiguous_container_v = is_contiguous_container<T>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename>
							 | 
						||
| 
								 | 
							
									struct is_macro_enum;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T>
							 | 
						||
| 
								 | 
							
									constexpr auto is_macro_enum_v = is_macro_enum<T>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename VariantT>
							 | 
						||
| 
								 | 
							
									struct is_variant_member;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									template<typename T, typename VariantT>
							 | 
						||
| 
								 | 
							
									constexpr auto is_variant_member_v = is_variant_member<T, VariantT>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // true if is integral/floating point, or is convertible to string
							 | 
						||
| 
								 | 
							
								    template<typename T>
							 | 
						||
| 
								 | 
							
								    struct is_basic_serializable;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // true if is integral/floating point, or is convertible to string
							 | 
						||
| 
								 | 
							
								    template<typename T>
							 | 
						||
| 
								 | 
							
								    constexpr auto is_basic_serializable_v = is_basic_serializable<T>::value;
							 | 
						||
| 
								 | 
							
								}
							 |