refactor is_compatible_integer_type
This commit is contained in:
		
							parent
							
								
									13760857ff
								
							
						
					
					
						commit
						77967e6548
					
				
					 2 changed files with 26 additions and 24 deletions
				
			
		|  | @ -137,31 +137,32 @@ template <typename BasicJsonType, typename CompatibleArrayType> | |||
| struct is_compatible_array_type | ||||
|     : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType> {}; | ||||
| 
 | ||||
| template<bool, typename, typename> | ||||
| template <typename RealIntegerType, typename CompatibleNumberIntegerType, | ||||
|           typename = void> | ||||
| struct is_compatible_integer_type_impl : std::false_type {}; | ||||
| 
 | ||||
| template<typename RealIntegerType, typename CompatibleNumberIntegerType> | ||||
| struct is_compatible_integer_type_impl<true, RealIntegerType, CompatibleNumberIntegerType> | ||||
| template <typename RealIntegerType, typename CompatibleNumberIntegerType> | ||||
| struct is_compatible_integer_type_impl < | ||||
|     RealIntegerType, CompatibleNumberIntegerType, | ||||
|     enable_if_t<std::is_integral<RealIntegerType>::value and | ||||
|     std::is_integral<CompatibleNumberIntegerType>::value and | ||||
|     not std::is_same<bool, CompatibleNumberIntegerType>::value >> | ||||
| { | ||||
|     // is there an assert somewhere on overflows?
 | ||||
|     using RealLimits = std::numeric_limits<RealIntegerType>; | ||||
|     using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>; | ||||
| 
 | ||||
|     static constexpr auto value = | ||||
|         std::is_constructible<RealIntegerType, CompatibleNumberIntegerType>::value and | ||||
|         std::is_constructible<RealIntegerType, | ||||
|         CompatibleNumberIntegerType>::value and | ||||
|         CompatibleLimits::is_integer and | ||||
|         RealLimits::is_signed == CompatibleLimits::is_signed; | ||||
| }; | ||||
| 
 | ||||
| template<typename RealIntegerType, typename CompatibleNumberIntegerType> | ||||
| template <typename RealIntegerType, typename CompatibleNumberIntegerType> | ||||
| struct is_compatible_integer_type | ||||
| { | ||||
|     static constexpr auto value = | ||||
|         is_compatible_integer_type_impl < | ||||
|         std::is_integral<CompatibleNumberIntegerType>::value and | ||||
|         not std::is_same<bool, CompatibleNumberIntegerType>::value, | ||||
|         RealIntegerType, CompatibleNumberIntegerType > ::value; | ||||
| }; | ||||
|     : is_compatible_integer_type_impl<RealIntegerType, | ||||
|       CompatibleNumberIntegerType> {}; | ||||
| 
 | ||||
| // trait checking if JSONSerializer<T>::from_json(json const&, udt&) exists
 | ||||
| template<typename BasicJsonType, typename T> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue