refactor is_compatible_object_type
This commit is contained in:
		
							parent
							
								
									b59c3367c9
								
							
						
					
					
						commit
						e84195ab7b
					
				
					 2 changed files with 40 additions and 32 deletions
				
			
		| 
						 | 
				
			
			@ -65,17 +65,31 @@ struct is_complete_type : std::false_type {};
 | 
			
		|||
template <typename T>
 | 
			
		||||
struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_type {};
 | 
			
		||||
 | 
			
		||||
template<bool B, class RealType, class CompatibleObjectType>
 | 
			
		||||
template <typename BasicJsonType, typename CompatibleObjectType,
 | 
			
		||||
          typename = void>
 | 
			
		||||
struct is_compatible_object_type_impl : std::false_type {};
 | 
			
		||||
 | 
			
		||||
template<class RealType, class CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type_impl<true, RealType, CompatibleObjectType>
 | 
			
		||||
template <typename BasicJsonType, typename CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type_impl <
 | 
			
		||||
    BasicJsonType, CompatibleObjectType,
 | 
			
		||||
    enable_if_t<is_detected<mapped_type_t, CompatibleObjectType>::value and
 | 
			
		||||
    is_detected<key_type_t, CompatibleObjectType>::value >>
 | 
			
		||||
{
 | 
			
		||||
    static constexpr auto value =
 | 
			
		||||
        std::is_constructible<typename RealType::key_type, typename CompatibleObjectType::key_type>::value and
 | 
			
		||||
        std::is_constructible<typename RealType::mapped_type, typename CompatibleObjectType::mapped_type>::value;
 | 
			
		||||
 | 
			
		||||
    using object_t = typename BasicJsonType::object_t;
 | 
			
		||||
 | 
			
		||||
    // macOS's is_constructible does not play well with nonesuch...
 | 
			
		||||
    static constexpr bool value =
 | 
			
		||||
        std::is_constructible<typename object_t::key_type,
 | 
			
		||||
        typename CompatibleObjectType::key_type>::value and
 | 
			
		||||
        std::is_constructible<typename object_t::mapped_type,
 | 
			
		||||
        typename CompatibleObjectType::mapped_type>::value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename BasicJsonType, typename CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type
 | 
			
		||||
    : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};
 | 
			
		||||
 | 
			
		||||
template<bool B, class RealType, class CompatibleStringType>
 | 
			
		||||
struct is_compatible_string_type_impl : std::false_type {};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -87,16 +101,6 @@ struct is_compatible_string_type_impl<true, RealType, CompatibleStringType>
 | 
			
		|||
        std::is_constructible<RealType, CompatibleStringType>::value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class BasicJsonType, class CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type
 | 
			
		||||
{
 | 
			
		||||
    static auto constexpr value = is_compatible_object_type_impl <
 | 
			
		||||
                                  conjunction<negation<std::is_same<void, CompatibleObjectType>>,
 | 
			
		||||
                                  is_detected<mapped_type_t, CompatibleObjectType>,
 | 
			
		||||
                                  is_detected<key_type_t, CompatibleObjectType>>::value,
 | 
			
		||||
                                  typename BasicJsonType::object_t, CompatibleObjectType >::value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class BasicJsonType, class CompatibleStringType>
 | 
			
		||||
struct is_compatible_string_type
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -445,17 +445,31 @@ struct is_complete_type : std::false_type {};
 | 
			
		|||
template <typename T>
 | 
			
		||||
struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_type {};
 | 
			
		||||
 | 
			
		||||
template<bool B, class RealType, class CompatibleObjectType>
 | 
			
		||||
template <typename BasicJsonType, typename CompatibleObjectType,
 | 
			
		||||
          typename = void>
 | 
			
		||||
struct is_compatible_object_type_impl : std::false_type {};
 | 
			
		||||
 | 
			
		||||
template<class RealType, class CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type_impl<true, RealType, CompatibleObjectType>
 | 
			
		||||
template <typename BasicJsonType, typename CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type_impl <
 | 
			
		||||
    BasicJsonType, CompatibleObjectType,
 | 
			
		||||
    enable_if_t<is_detected<mapped_type_t, CompatibleObjectType>::value and
 | 
			
		||||
    is_detected<key_type_t, CompatibleObjectType>::value >>
 | 
			
		||||
{
 | 
			
		||||
    static constexpr auto value =
 | 
			
		||||
        std::is_constructible<typename RealType::key_type, typename CompatibleObjectType::key_type>::value and
 | 
			
		||||
        std::is_constructible<typename RealType::mapped_type, typename CompatibleObjectType::mapped_type>::value;
 | 
			
		||||
 | 
			
		||||
    using object_t = typename BasicJsonType::object_t;
 | 
			
		||||
 | 
			
		||||
    // macOS's is_constructible does not play well with nonesuch...
 | 
			
		||||
    static constexpr bool value =
 | 
			
		||||
        std::is_constructible<typename object_t::key_type,
 | 
			
		||||
        typename CompatibleObjectType::key_type>::value and
 | 
			
		||||
        std::is_constructible<typename object_t::mapped_type,
 | 
			
		||||
        typename CompatibleObjectType::mapped_type>::value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename BasicJsonType, typename CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type
 | 
			
		||||
    : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};
 | 
			
		||||
 | 
			
		||||
template<bool B, class RealType, class CompatibleStringType>
 | 
			
		||||
struct is_compatible_string_type_impl : std::false_type {};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -467,16 +481,6 @@ struct is_compatible_string_type_impl<true, RealType, CompatibleStringType>
 | 
			
		|||
        std::is_constructible<RealType, CompatibleStringType>::value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class BasicJsonType, class CompatibleObjectType>
 | 
			
		||||
struct is_compatible_object_type
 | 
			
		||||
{
 | 
			
		||||
    static auto constexpr value = is_compatible_object_type_impl <
 | 
			
		||||
                                  conjunction<negation<std::is_same<void, CompatibleObjectType>>,
 | 
			
		||||
                                  is_detected<mapped_type_t, CompatibleObjectType>,
 | 
			
		||||
                                  is_detected<key_type_t, CompatibleObjectType>>::value,
 | 
			
		||||
                                  typename BasicJsonType::object_t, CompatibleObjectType >::value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class BasicJsonType, class CompatibleStringType>
 | 
			
		||||
struct is_compatible_string_type
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue